2015-12-01 6 views
7

私のプロジェクトには複数のビルドターゲットがありますので、同じコードを共有するが、ターゲットごとに一意のバンドルIDとアセットを持つブランドビルドを容易にすることができます。私は自分のアプリターゲットの1つの時計アプリを作成しましたが、これは問題なく動作しています。今私は他のターゲットに同じウォッチアプリと拡張機能を使用しようとしています。私は簡単に時計のターゲット(時計と拡張子)を複製し、単に他のターゲットと一致するようにすべてのバンドルID参照を変更することができたと思ったが、それは隠された参照のように見える。複数のターゲット間で共有される時計アプリ

私はちょうど私のすべての異なるブランドのターゲットのための1つの時計アプリを使用したいと思います。

サイドノート:時計アプリも正しくブランド設定する必要があります(アセットフォルダ)。

アイデア?ありがとう。

ソリューション更新

だから、私はそれを解決しました。私は腕時計のターゲット(時計と拡張子)を複製し、バンドルID、ターゲットの依存関係、古いターゲットと同じにするためにすべてを変更しましたが(もちろん新しいターゲットを指しています)、何らかの理由で新しい時計のターゲットは、正しい時計拡張ターゲットを指します。それをどこでも変更する方法はありませんでした。私はターゲットを再複製しようとしましたが、それでも同じ問題がありました。

私がしたことは、project.pbxprojファイルを開き、Watch拡張(およびバンドルID)への参照を検索し、手動で接続を更新することでした。私の腕時計のターゲットは、間違った時計延長に依存していました。新しい時計延長には何とか古い時計拡張へのポインタがありました。私は後で、これも間違っていたので、私は正しいproductreference(appex参照)にビルドを指摘しなければならないことを知った。

新しい時計ターゲットが間違った時計拡張子を指し、正しい時計拡張子が間違ったappex(出力ファイル)を指していました。このすべてをプロジェクトファイルで手動で変更する必要がありました。極端で難しいとは言えますが、いったん異なるUUIDをメモしてしまえば、それほど難しいことではありませんでした。

これは、同じ奇妙な問題に遭遇する可能性のある他の人に役立つことを願っています。

+0

あなたはこの瞬間を拡張してくださいすることができ、私は隠された参照についてはキャッチしていません。 –

+0

確かに、私は時計のターゲット(時計と拡張子)を複製した後でも、バンドルIDとどのアプリケーションをターゲットにする必要があるのか​​、そしてすべてのターゲット依存性などを変更しても、ビルドできません。しかし、私はそれを今解決しました。質問を更新してください。 – tskulbru

+0

私は同じ問題に遭遇しました。あなたは、ターゲットを複製した後に手動で変更する必要があるすべてのノートを投稿できますか?それは非常に役に立つでしょう。また、ソリューションを回答に移す場合もあります。 :) – Joey

答えて

5

複数のターゲットに対して1つのウォッチアプリを使用することは間違いありません。 XcodeがWatchコンパニオンアプリをバンドルに含めるかどうかを調べるために使用する唯一の要因は、WatchアプリのバンドルIDです。だから1対1の関係があります。

iOSアプリケーションターゲットごとにWatchOSアプリと拡張ターゲット(バンドルIDのみ変更)を複製する必要があります。しかし、Target Membershipを使ってターゲット間でコード(ストーリーボードやアセットを含む)を共有することはできますが、ブランドの時計アプリの問題も解決します。最後に、最小コードの重複オーバーヘッドを取得します。

更新:ターゲットを右クリックしてDuplicateオプションを選択すると、ウォッチターゲットを複製しようとしています。それは何らかの理由で実際には機能しません。

私は、次の手順を実行ウォッチ対象クローンを作成してみました:

  1. ファイル - >新規 - >ターゲット - > WatchKitアプリケーション。
  2. Embed in Companion Application必要なターゲットを指定します。
  3. Target Membershipオプションを使用して、新しく作成されたターゲットにすべてのファイルを追加しました。

その後、プロジェクトは作成され、新しいWatchターゲットで問題なく実行されました。

この方法でバンドルIDを手動で変更する必要はありません。すべてが自動的にXcodeによってスムーズに作成されます。

+0

すでに書いたように、ターゲットを複製してバンドルIDを変更しようとしました。これはうまくいきませんでした。 – tskulbru

+0

@tskulbru - 答えを更新しました。 –

+0

「すべてのファイルを追加しました」と言ったとき、正しい解決策のように聞こえます。正確にはどういう意味ですか?間違っていないと、このアプローチを行うことで、新しいwatchとwatchextensionフォルダが得られます(watchBとwatchB拡張という)。 watchAのフォルダからwatch'Bにファイルを追加しますか?または、watchAのフォルダ内のファイルのターゲットにwatchBを追加するだけですか? – tskulbru

0

"エラー= MultipleWatchKitTwoApps ...(〜/ライブラリ/ Logs/CoreSimulator/CoreSimulator.log)"、メインターゲットの複製が終了したとき&は手動でOSキットを見た。

解決策:主ターゲット構築フェーズ→ターゲット依存関係は、他のwatchkitアプリケーションへの参照を持つことが観察されました。 &を削除すると、新しいwatchOSキットアプリが正しく依存関係に追加されていることを確認してください。

同様に、埋め込み時計コンテンツセクションで、他のターゲットwatchOSapp参照を削除します。

これは私がこの記事全体で数回来て、成功せずにすべてを試み、そして最後に、私はそれを修正する方法を見つけ、問題の「エラー= MultipleWatchKitTwoApps ...」

0

を解決します。私はあなたがiOSアプリが動作していることを前提としており、Apple時計アプリが動作していて、コードを繰り返さずにApple時計アプリを追加する必要があります。

ステップ1:ファイル/新規/ターゲットは「WatchOS」タブを選択し、選択し、「WatchKitアプリケーションは、」あなたは、この新しいAppleウォッチアプリでたいリンク[次へ]をクリックし、アプリケーションを選択し

ステップ2:新見あなたの新しいApple Watchアプリ用に作成されたフォルダとすべての* .swiftと* .storyboardを削除する

ステップ3:最初に動作していた懐疑的Apple Watchアプリの.storyboardと.swiftファイルを選択し、新しいターゲットメンバーシップと古いターゲットメンバーシップです。今後、すべての時計アプリファイルにこれらのターゲットが選択されている必要があります。

enter image description here

+1

ストーリーボードのレイアウトなどが間違ったターゲットプレフィックスを取得するかどうかは不明です。ですから 'MyView'と2つのターゲット' target1、target2'を持っていれば、 'target2'をビルドしているかどうかに関わらず(storyboardファイルの中で)' target1_MyView'という名前になります。コンパイルエラーが発生しない場合は、実行すると劇的に失敗します。 – tskulbru

関連する問題