web-dev-qa-db-ja.com

iPhoneとAppleウォッチ)の間でクラスを共有する

私は誰かがこれにいくらかの光を当てることができることを望んでいました。調べてみましたが、なかなか見つかりませんでした...

IPhoneアプリケーションとApple時計拡張機能)の間でクラスを共有する方法はありますか?

時計の拡張機能にクラスmyClassがあるとしましょう。電話アプリケーション内でこのクラスを使用できません。とにかくこれを回避する方法はありますか?

20
prawn

iPhoneアプリケーションとApple時計の拡張子は、プロジェクト内の基本的に異なるターゲットです。ファイルごとに(.hファイルを除く)、それを含めるターゲットを指定できます。

これを行うには、少なくとも2つの方法があります。

1)トップメニューから[表示]-> [ユーティリティ]-> [ファイルインスペクター]を選択します。右側のパネルが表示され、プロジェクトで使用可能なターゲットの横にチェックボックスが付いたターゲットメンバーシップセクションが表示されます。このファイルを含めるターゲットを確認してください。この場合、iPhoneアプリとWatchKit拡張機能。

2)プロジェクトをクリックして、プロジェクト設定に移動することもできます。 必要なターゲットを選択してください。 (つまり、iPhoneアプリまたはWatchKit拡張機能)、ビルドフェーズタブをクリックします。ソースのコンパイルで、「+」アイコンをクリックして、ターゲット用にビルドするファイルをさらに追加できます。 (つまり、あなたの場合はmyClass.m)

お役に立てれば!

37
j-techsha

別の可能な解決策(そして最終的に私の問題を解決したもの)は、ウォッチターゲットがブリッジファイルの場所も認識していることを確認することです!

  • プロジェクト設定を開き、WatchKit拡張機能を選択します。

  • ビルド設定で、キーワード「ブリッジング」を検索します

  • Objective-Cブリッジヘッダーファイルが設定されていることを確認してください enter image description here

6
erparker

これを行うには2つの方法があります。

  1. 共有コードを含むフレームワークを作成し、そのフレームワークをWatchKit拡張機能とiPhoneアプリにリンクします。これは、最もクリーンで推奨される方法です。

  2. MyClassのソースファイル(および依存関係)をiPhoneとWatchKitの両方の拡張ターゲットに追加します。

3
Stephen Johnson

IPhoneアプリのObj-CクラスをSwift Watch App Extensionのコードで共有したい場合:

  1. IPhoneアプリから共有したいすべての.mファイルをTargetfor WatchKit Extensionアプリ(つまり、Target Membership)に含めます。

  2. ブリッジヘッダー(新しい.hファイル)ファイル(通常は[projectName] -Bridging-Header.hという名前)を作成します。オプションで、[projectName] -Watch-Bridging-Header.h(またはその他の適切なもの)という名前を付けることができます。

  3. WatchKit Extensionターゲットに含まれる.mに対応するすべての.hファイルを、ブリッジヘッダーファイルのインポートとしてインクルードします(例:#import "MyLogger.h")。
  4. これで、WatchKit拡張アプリコードでObj-Cクラスを使用する準備が整いました。
1
rkwatra