私のプロジェクトまたは Xcode で何かが本当に壊れており、何が起こっているのかを理解するのに 2 日間苦労しています。
私のアプリケーションは問題なく動作しています。これは OS X アプリケーションであり、Today Widget 拡張機能が含まれています。最近プロジェクトを完成させましたが、検証エラーのためにアプリを公開できません。
それは、メイン アプリケーションと Widget 拡張機能の間でコンテンツを共有するために使用するアプリケーション グループについてバリデーターが不平を言うことから始まりました。グループは として定義されまし$(TeamIdentifierPrefix)com.acme.GreatApp
た。
バリデーターは、私のグループ名が間違った形式であり、むしろ私の TEAMID で始まるべきだと不平を言っていました。$(TeamIdentifierPrefix)
サークルで 3 時間走った後、プレースホルダーをチーム ID (例: )に置き換えたS3F45A5S35.
ところ、うまくいきました。
info.plist
次に、バリデーターは、 myおよび entitlements ファイル内の他のあらゆる種類のプレースホルダー ( $(PRODUCT_NAME)
、 、com.acme.GreatApp.$(PRODUCT_NAME:rfc1034identifier)
など) について不平を言いました$(EXECUTABLE_NAME)
。これらのプレースホルダーをすべて対応する値に置き換えたところ、受け入れられました。
その後、しばらくの間、バリデーターは構造的な問題について不平を言いましたが、これは私にはあまり意味がありません。
iTunes Store の操作に失敗しました。不正な CFBundleExecutable。ネストされたバンドル GreatAppWidget [com.acme.GreatApp.pkg/Payload/GreatApp.app/Contents] プロパティ リスト ファイルで CFBundleExecutable の値に一致する実行可能ファイルが見つかりません
iTunes Store の操作に失敗しました。バンドル ID が正しくありません。アプリケーション拡張 GreatApp.app/Contents/Plugins/GreatAppWidget.appex のバンドル ID 'com.acme.GreatApp.GreatAppWidget' は、それを含むアプリケーション (com.acme.GreatApp.GreatAppWidget) のバンドル ID のドット パスを拡張する必要があります。
私の拡張機能が拡張機能に含まれていると言っていますか?
iTunes Store の操作に失敗しました。バンドルの場所が無効です。バンドル GreatApp.app/Contents/Plugins/GreatAppWidget.appex は、親バンドルの Contents/Plugins ディレクトリに含まれている必要があります。
まあ、エラーは、それが正しくないと主張することをするべきだと述べています。明らかにそれは親アプリフォルダーにありますContents/Plugins
。だから何?
iTunes Store の操作に失敗しました。2 つのバンドルの CFBundleExecutable が同じファイルを指していない場合があります。次の共有バンドル パスが見つかりました: GreatApp.app/Contents。
問題は、私のアプリと拡張機能が完全に正常に動作することです。依存関係やパスなど、何かが壊れているとしたら、何かがうまくいかない可能性が高いですよね?
さらに、ビルド設定を変更したり、理解できないものを変更したりしませんでした。これらはすべてデフォルト設定です。新しい Cocoa アプリケーションを作成し、新しい Today Widget Extension をターゲットとして追加しました。それだけです。パス、場所、依存関係などをいじりませんでした。
とにかく、これらのエラーはしばらくしか表示されなかったので、幸運にもスクリーンショットを作成しました。なぜなら、私がそれを引き起こす可能性のあるものを変更していないにもかかわらず、エラーメッセージに生のプレースホルダーが表示されているからです。私が行ったことを思い出すことができる唯一のことは、すべてのプロビジョニング プロファイルと証明書をディスク上、キーチェーン、およびメンバー センターでローカルに削除/取り消し、Xcode を使用してゼロからすべてを作成したことでした。
エラーは次のようになります。
iTunes Store の操作に失敗しました。不正な CFBundleExecutable。ネストされたバンドル${bundleName} [ ${bundlePath} ] プロパティ リスト ファイルで CFBundleExecutable の値と一致する実行可能ファイルが見つかりません
iTunes Store の操作に失敗しました。バンドル ID が正しくありません。アプリケーション拡張機能${bundlePath}のバンドル ID ' ${bundleIdentifier} ' は、それを含むアプリケーション ( ${parentBundleIdentifier} )のバンドル ID のドット パスを拡張する必要があります。
iTunes Store の操作に失敗しました。バンドルの場所が無効です。バンドル${bundlePath}は、親バンドルの${pluginsSubPath}ディレクトリに含まれている必要があります。
iTunes Store の操作に失敗しました。2 つのバンドルの CFBundleExecutable が同じファイルを指していない場合があります。次の共有バンドル パスが見つかりました: ${sharedBundlePath}。
だから私は、Apple が最近のアップデートでそれを煽っただけで、拡張機能を使ってアプリを検証できないのではないかと考えました。それで私はウェブを検索し、本当に素晴らしいサンプルToday-Scriptsを見つけました。すべてのターゲットにアプリ グループ ( $(TeamIdentifierPrefix)com.acme.Today-Scripts
、ここでのプレースホルダーは完全に機能します) を追加し、サンドボックスを有効にし、証明書とプロビジョニング プロファイルを変更しました。
そこで、すべてのビルド設定などを比較しました。プレースホルダーを実際の値、明らかに証明書とプロファイル、および Today-Scripts にウィジェットに埋め込まれた追加の XPC ターゲットがあるという事実に置き換える必要があったことを除いて、彼らは原子的に同じです。すべて の 設定は同じです。
すべてのキャッシュをクリアしました。本当に大変です。プロジェクトをクリーンアップし、クリア~/Library/Developer/Xcode/DerivedData
し~/Library/Caches/com.apple.dt.Xcode
、数回再起動しましたが、何も役に立ちません。
自分に何ができるのかわからないので、本当に必死です。Xcodeがここで何をしているのか、そしてその理由を誰かが明らかにしてください。
- Xcode が
info.plist
および entitlements ファイル内のすべてのプレースホルダーを解釈できない原因は何ですか? bundle
上記のエラーは、私が作業しているときに どのように発生しますか- 新しいココアアプリを作成し、拡張ターゲットを追加することによって作成された正確な設定XCode?
- Today-Scripts の例とまったく同じ設定/依存関係ですか?