私の最初のiOSアプリを開発してから4か月後、それをApp Store
に送信します。私はiTunes Connect
でアプリを作成し、すべての詳細を入力して、Connect
とXcode
の両方に正しいBundle ID
を設定しました。しかし、私はこの奇妙な問題を解決しようとして過去3日間苦労しました。 xcodeがメインアプリではなくCocoapods
フレームワークをアップロードしようとしているようです。
アーカイブ後、Window > Organizer > Validate...
に行きました。次の画面が表示されます。
エラー:
(グーグルの場合:適切なアプリケーションレコードが見つかりませんでした。バンドル識別子 'org.cocoapods.Alamofire
'が正しいことを確認してください)。
エラーメッセージは、自分のバンドルではなく、フレームワークの名前に従ってBundle ID
を一致させようとしていることを示しています(例:com.organization.AppName
)。どこにも答えが見つかりません。 Podfile
(use_frameworksがあります!)とさまざまなconfの組み合わせで次のことを試しましたが、成功しませんでした。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
end
end
end
質問:
Xcode
がメインアプリケーションだけでなくframework's bundle id
と一致しようとしているのはなぜですか?EDIT 1:私はこの問題を回避することができましたが、後で別の問題が発生したため、まだ解決策がありません。基本的に、Alamofire Pod(Cocoapodsから)にはバンドルID com.xxx.Alamofire
があります。 com.xxx.myAppName
に変更しました。これで、App Storeに送信できましたが、次のエラーのため、TestFlightからiPhoneにアプリをインストールできません。
4/22/16, 12:50:29 AM itunesstored[124]: [ApplicationWorkspace]: Failed to install application: com.xxx.myAppName; /var/mobile/Media/Downloads/5927832272594571027/-6969961974973998640; Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=DuplicateIdentifier, ErrorDescription=The parent bundle has the same identifier (com.xxx.myAppName) as sub-bundle at /private/var/installd/Library/Caches/com.Apple.mobile.installd.staging/temp.IVHCuO/extracted/Payload/MyApp.app/Frameworks/Alamofire.framework}
これにかなりの時間を費やした後、私はそれを機能させることができました。基本的に、Alamofireだけがこの問題を提示していました。これが私がしたことです:
com.company.appName
、 書く com.company.appName.Alamofire
初期化。私は試した com.company.appName
フレームワーク、com.company.Alamofire
、何も機能しませんでした。
アプリをiTunesConnectに送信しようとすると、「適切なアプリケーションレコードが見つかりませんでした。バンドル識別子「org.cocoapods.Alamofire」が正しいことを確認してください」という正確なエラーが表示されました。
バンドルOSタイプコードを[〜#〜] appl [〜#〜]に変更して、最終的に修正しました。
それは私にとって完璧に機能します。 Info.plistを右クリックして「ソースコード」として開き、<key>CFBundlePackageType</key>
を文字列APPLに変更しました
<key>CFBundlePackageType</key>
<string>APPL</string>
App Storeにアップロードしようとすると、次のエラーが表示され、この問題が発生しました。
iTunes Storeの操作に失敗しました。
適切な申請記録が見つかりませんでした。バンドル識別子 'org .cocoapods。Alamofire'が正しいことを確認してください
(Cocoapodsを使用しているときに)アップロードを試みて修正を見つけることができなかったときにこれに遭遇し、プロジェクトからCocoapodsを完全に削除するという抜本的なアクションを実行し、代わりにフレームワークとして各ポッドを手動で追加しました。
そして...... App Storeへのアップロードは基本的に同じエラーで失敗しました! ????
iTunes Storeの操作に失敗しました。
適切な申請記録が見つかりませんでした。バンドル識別子「org .alamofire。Alamofire」が正しいことを確認してください
そのため、Xcode自体でのフレームワークの使用に関連するエラーの可能性があります。
これは必ずしもCocoapodsが原因ではないことがわかったので、Cocoapodsを使い続けることを決定し、これを修正するために次の手順を考え出しました。
修正:
私たちのプロジェクトには2つのターゲットが含まれています(単体テストのターゲットは無視されます)。アプリケーション用に1つ(これをMyAppと呼びます)、ネットワークレイヤーと他の非アプリ固有の機能を含む別のもの(これをMyAppKit)。
Bundle OS Type code
にCFBundlePackageType
(Info.plist
とも呼ばれます)を追加し、APPL
に設定します。Always Embed Swift Standard Libraires
からYes
になっていることを確認してください。Always Embed Swift Standard Libraires
からNo
であることを確認してください。ここで何が起こっているのかを正確に調べていますが、これは現在この問題を経験している人にとっては役立つと思います。
最近、cocoapodsを使用してアプリを公開しているときにも同じ問題が発生しました。これはObjective-Cプロジェクトであり、ポッドを動的フレームワークとして統合しています。
これはすでに 報告されたバグ です。
この問題を回避するには、次の2つの方法をお勧めします。
動的フレームワークの代わりに静的ライブラリを使用します。そのために、コメントすることができます#use_frameworks!ポッドファイルの行。
フレームワークを使用する必要がある場合は、以下の手順を試すことができます。
Xcodeターゲットに埋め込みバイナリとしてフレームワークを追加します。
ターゲットのビルドフェーズで、実行スクリプトを追加します。
スクリプト例:
# Stripping framework only for archive
if [ "$ACTION" = "install" ]; then
FRAMEWORK_NAME="Framework name"
SCRIPT_FILE_NAME="strip-framework.sh"
# Set working directory to product’s embedded frameworks
cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/${FRAMEWORK_NAME}.framework"
# Get architectures for current file
ARCHS="$(lipo -info "${FRAMEWORK_NAME}" | rev | cut -d ':' -f1 | rev)"
for Arch in $ARCHS; do
if ! [[ "${VALID_ARCHS}" == *"$Arch"* ]]; then
# Strip non-valid architectures in-place
lipo -remove "$Arch" -output "$FRAMEWORK_NAME" "$FRAMEWORK_NAME" || exit 1
fi
done
echo "Framework was successfully stripped with unsupported architectures"
fi
# Removing script from framework folder
if [ -f ${SCRIPT_FILE_NAME} ]; then
rm -rf "${SCRIPT_FILE_NAME}"
fi
注:このスクリプトのフレームワーク名を置き換えてください!、「strip-framework.sh」という名前のこのスクリプトファイルをフレームワークディレクトリの最上位に配置してください。
プロバイダーとその消費者の義務によって署名されたことがないサードパーティのフレームワーク。したがって、アーカイブすると、アプリバンドルと一緒にフレームワークに署名します。しかし、それを行った後、Application loaderはバンドル識別子をフレームワークの1つと見なします。その奇妙なことはまだ。
2日間作業した後、ようやくアプリを公開することができました。
このトリッキーな方法で送信できたとしても、デバイスにインストールされることはありません。
最後に、私は完璧な解決策を得て、その理由を見つけました。これは、サードパーティのフレームワークにいくつかの問題があるために発生しています。たとえば、私の場合、Quickbloxフレームワークはまだビットコードをサポートしていません。そのため、メインターゲットとフレームワークのビルド設定でビットコードを完全に無効にする必要がありました。これで問題が確実に修正されます。
まず、バンドルIDを確認してください。次に、アプリがアプリ内ストア接続で作成されていることを確認してください。これが、アプリをストアにアップロードできない理由の1つである可能性があります。
アプリタイトルに通常のスラッシュ「/」が含まれている場合、xcodeはそれに署名できず、最初のフレームワークorg.cocoapods。***をアップロードしていると考えます。
私がしたこと-スラッシュを同様の記号に変更∕
(最初のスラッシュ、次のスラッシュ-他のUnicode記号:∕ /)