web-dev-qa-db-ja.com

iOSアプリをAppStoreにアップロードするときにフレームワークバンドルIDを照合しようとするXcode

私の最初のiOSアプリを開発してから4か月後、それをApp Storeに送信します。私はiTunes Connectでアプリを作成し、すべての詳細を入力して、ConnectXcodeの両方に正しいBundle IDを設定しました。しかし、私はこの奇妙な問題を解決しようとして過去3日間苦労しました。 xcodeがメインアプリではなくCocoapodsフレームワークをアップロードしようとしているようです。

アーカイブ後、Window > Organizer > Validate...に行きました。次の画面が表示されます。

enter image description here

エラー:

enter image description here

(グーグルの場合:適切なアプリケーションレコードが見つかりませんでした。バンドル識別子 '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

enter image description here

All codesigning set to automatic

質問:

  • 私が行っている手順は正しいですか?
  • 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}
23
Alex

これにかなりの時間を費やした後、私はそれを機能させることができました。基本的に、Alamofireだけがこの問題を提示していました。これが私がしたことです:

  1. ナビゲーターで、ポッドをクリックします。
  2. Targetsの下に、アプリが使用しているすべてのフレームワークが表示されます。
  3. Alamofire(または問題を引き起こしているフレームワーク)をクリックします。
  4. バンドルIDを編集します。アプリのバンドルIDがcom.company.appName、 書く com.company.appName.Alamofire 初期化。

私は試した com.company.appNameフレームワーク、com.company.Alamofire、何も機能しませんでした。

5
Alex

アプリをiTunesConnectに送信しようとすると、「適切なアプリケーションレコードが見つかりませんでした。バンドル識別子「org.cocoapods.Alamofire」が正しいことを確認してください」という正確なエラーが表示されました。

バンドルOSタイプコード[〜#〜] appl [〜#〜]に変更して、最終的に修正しました。

5
neilge

それは私にとって完璧に機能します。 Info.plistを右クリックして「ソースコード」として開き、<key>CFBundlePackageType</key>を文字列APPLに変更しました

<key>CFBundlePackageType</key>
<string>APPL</string>
5

App Storeにアップロードしようとすると、次のエラーが表示され、この問題が発生しました。

iTunes Storeの操作に失敗しました。

適切な申請記録が見つかりませんでした。バンドル識別子 'org .cocoapods。Alamofire'が正しいことを確認してください

(Cocoapodsを使用しているときに)アップロードを試みて修正を見つけることができなかったときにこれに遭遇し、プロジェクトからCocoapodsを完全に削除するという抜本的なアクションを実行し、代わりにフレームワークとして各ポッドを手動で追加しました。

そして...... App Storeへのアップロードは基本的に同じエラーで失敗しました! ????

iTunes Storeの操作に失敗しました。

適切な申請記録が見つかりませんでした。バンドル識別子「org .alamofire。Alamofire」が正しいことを確認してください

そのため、Xcode自体でのフレームワークの使用に関連するエラーの可能性があります。

これは必ずしもCocoapodsが原因ではないことがわかったので、Cocoapodsを使い続けることを決定し、これを修正するために次の手順を考え出しました。

修正:

私たちのプロジェクトには2つのターゲットが含まれています(単体テストのターゲットは無視されます)。アプリケーション用に1つ(これをMyAppと呼びます)、ネットワークレイヤーと他の非アプリ固有の機能を含む別のもの(これをMyAppKit)。

  1. MyAppのBundle OS Type codeCFBundlePackageTypeInfo.plistとも呼ばれます)を追加し、APPLに設定します。
  2. プロジェクトMyAppとターゲットMyAppのビルド設定がAlways Embed Swift Standard LibrairesからYesになっていることを確認してください。
  3. ターゲットのMyAppKitのビルド設定がAlways Embed Swift Standard LibrairesからNoであることを確認してください。

ここで何が起こっているのかを正確に調べていますが、これは現在この問題を経験している人にとっては役立つと思います。

4
Simo

最近、cocoapodsを使用してアプリを公開しているときにも同じ問題が発生しました。これはObjective-Cプロジェクトであり、ポッドを動的フレームワークとして統合しています。

これはすでに 報告されたバグ です。

この問題を回避するには、次の2つの方法をお勧めします。

  • 動的フレームワークの代わりに静的ライブラリを使用します。そのために、コメントすることができます#use_frameworks!ポッドファイルの行。

  • フレームワークを使用する必要がある場合は、以下の手順を試すことができます。

    1. Xcodeターゲットに埋め込みバイナリとしてフレームワークを追加します。

    2. ターゲットのビルドフェーズで、実行スクリプトを追加します。

スクリプト例:

# 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フレームワークはまだビットコードをサポートしていません。そのため、メインターゲットとフレームワークのビルド設定でビットコードを完全に無効にする必要がありました。これで問題が確実に修正されます。

このスクリーンショットを確認してください: Disable Bitcode これが皆さんのお役に立てば幸いです。乾杯!

1
softninja

まず、バンドルIDを確認してください。次に、アプリがアプリ内ストア接続で作成されていることを確認してください。これが、アプリをストアにアップロードできない理由の1つである可能性があります。

0
Hemant Sharma

アプリタイトルに通常のスラッシュ「/」が含まれている場合、xcodeはそれに署名できず、最初のフレームワークorg.cocoapods。***をアップロードしていると考えます。

私がしたこと-スラッシュを同様の記号に変更∕

(最初のスラッシュ、次のスラッシュ-他のUnicode記号:∕ /)

0
Eugene Pinchuk

私の場合、Podsサブプロジェクトからプロビジョニングプロファイル設定を削除する必要がありました enter image description here

0