web-dev-qa-db-ja.com

Xcodeの構成グループごとの資格文字列?

Xcodeプロジェクトで構成ごとのアプリグループの資格文字列を簡単に設定する方法はありますか?

両方のターゲットで「アプリグループ」の資格を使用して、iOSアプリケーションと今日の拡張機能の間で設定を共有しようとしています。

私たちが抱えている問題は、エンタープライズビルドかリリースビルドかによって、異なるバンドルIDとチームIDでアプリケーションをビルドすることです。

Xcode 6の機能画面を使用すると、アプリグループが赤い文字で表示され、各構成の文字列を個別に変更する方法がわかりません。

私は次のいずれかが機能すると想定していますが、どちらを最初に試すべきかわかりません。

  1. .xcconfigファイル
  2. 手動で作成された資格ファイル
  3. ビルドスクリプト
  4. 構成に依存するplistエントリ

提案?

20
EricS

構成ごとに異なる資格ファイルを使用できます。これは、Xcodeの「ビルド設定」ユーザーインターフェイスで指定するか、ビルド構成ファイル(.xcconfig)で指定できます。

Xcconfigの例:

CODE_SIGN_ENTITLEMENTS = Debug.entitlements

CODE_SIGN_ENTITLEMENTSの値は、この構成の正しい資格ファイルを指します。 Xcodeでは、必要な数の構成を作成できます。デフォルトでは、Xcodeはデバッグとリリースを作成します。エンタープライズを追加し、CODE_SIGN_ENTITLEMENTSがエンタープライズビルドの正しいエンタイトルメントファイルを指すビルド構成ファイルを使用できます。

Xcodeの「機能」ユーザーインターフェイスは、ビルド製品にちなんで名付けられた資格ファイルを作成および管理します。必要に応じて、このファイルを直接編集できます。

  1. ビルド構成ごとにXCConfigビルド構成ファイルを作成します。この例では、デバッグとリリースのみを使用します。エンタープライズなどの独自のビルド構成を追加するのは簡単です。
  2. 上記のように、xcconfigファイルに適切なCODE_SIGN_ENTITLEMENTS設定を入力します。
  3. プロジェクトの「情報」ユーザーインターフェースで、適切なXCConfigファイルを使用するようにビルド構成を設定します。

enter image description here

  1. ビルド製品のコード署名資格ビルド設定を確認することで確認できます。次のようなものが表示されます。

enter image description here

そこにboldテキストが表示されている場合は、そのビルド設定を強調表示して、deleteを押します。これにより、xcconfig設定を上書きしているXcodeビルド設定が削除されます。

21
quellish

これは、「ビルド設定」で設定できます。異なるバンドルIDを設定するのと同じ方法。

手順:

  1. 新しい「ユーザー定義設定」enter image description here
  2. 各スキーマ/構成に対して "APP_GROUP_ID"を指定します enter image description here
  3. テストして、アプリのIPAを作成し、解凍します。
  4. .appをチェックアウトし、右クリックして「Show Package Contents」を選択します。
  5. 資格ファイルを探します。 (資格ファイルが見つからない場合は、。xcentファイルを探し、拡張子を。entitlementsに変更します
  6. 資格ファイルのアプリグループの値が、手順2で指定した正しいアプリグループIDかどうかを確認します。

乾杯!

この質問のコメントが示すように、Xcode 8にはバグがあるようです。

私は非常に大雑把で危険ですが、回避策があると思います。

アイデアは、Xcode 8が参照する1つのエンタイトルメントファイルだけを用意し、スクリプトがそれを、ビルドしようとしている構成に適したファイルに置き換えることです。

この回避策には多くの手順があり、すべてが必要なわけではありません。より多くの情報が得られたら、この投稿を更新してみます。このようなものをテストする場合は、コメントを追加してください。

さらに、古いプロビジョニングプロファイルは、Xcode 8を再び開く前に削除する必要がある可能性があります。

Xcode 8を開く前に派生データを削除することも役立つようです。

警告!これをテストするATあなた自身のリスク。これは取り返しのつかない損傷を与える可能性があります

  • すべてのプロビジョニングプロファイルを削除します
  • derivedDataを削除します

このハックを設定する

  • 以下のスクリプトをプロジェクトフォルダに保存します。
  • MyProject *を読み取るプロジェクト名とターゲット名にパッチを適用します
  • 構成名のパッチ
  • このスクリプトがMyProject.entitlementsの上にコピーしようとする構成ごとの資格ファイル名を確認します
  • すべての構成でMyProject.entitlementsを資格ファイルとして構成する
  • すべてのターゲットに対して同じことを行います(たとえば、watchkitアプリがある場合)
  • スクリプトを実行する前に:
    • Xcodeで正しいスキームを選択する
    • Xcodeを閉じる

スクリプトテンプレート:

    #!/bin/bash                                                                                                                                                                                                                       

    echo

    if [ ! -n "$BASH" ] ;then echo Please run this script $0 with bash; exit 1; fi

    if [ $# -ne 1 ];  then
        echo
        echo "ERROR: one of the following expected as parameter: release alpha debug"
        echo
        exit -2
    fi

    chosen=$1

    echo "You have chosen build configuration $chosen"
    echo
    echo "This script is a workaround for Xcode 8 bug in handling different build configs and app groups."
    echo "(This scenario is most likely not on Apples list of things that developers are expected to do.)"
    echo
    echo "See comments in this SO answer"
    echo "http://stackoverflow.com/a/25734318/1148030"
    echo
    echo "1) This script must be run with Xcode 8 shut down."
    echo "2) All old provisioning profiles will be deteled. Xcode 8 will recreate them with hopefully correct build config."
    echo
    echo
    echo "WARNING: This will delete ALL provisioning profiles for all apps!"
    echo "WARNING: This will delete ALL MyProject named DerivedData."
    echo

    read -n 1 -s -p "Press any key to continue or Ctrl-C to cancel"

    echo

    # NOTE ABOUT DELETING DERIVED DATA                                                                                                                                                                                                
    # Deleting derived data fixes 2 bugs:                                                                                                                                                                                             
    # 1) Xcode 8 stubbornly generating some distribution profiles for old entitlements files                                                                                                                                          
    # 2) Install from HockeyApp fails due to signing verification error                                                                                                                                                               

    echo "Deleting derived datas"
    rm -vrf /Users/pelam/Library/Developer/Xcode/DerivedData/MyProject-*
    echo

    echo "Deleting provisioning profiles"
    rm -v ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision

    echo

    echo "Replacing target entitlements files"
    echo
    cp -v "./MyProjectTarget/MyProjectTarget.$chosen.entitlements" "./MyProjectTarget/MyProjectTarget.entitlements" || exit -1
    cp -v "./MyProjectAnotherTarget/MyProjectAnotherTarget.$chosen.entitlements" "./MyProjectAnotherTarget/MyProjectAnotherTarget.entitlements" || exit -1
    echo ADD COPY COMMANDS FOR OTHER TARGETS HERE

    echo
    echo "SUCCESS! Now run Xcode and verify that correct profiles are created."
    echo
    echo "NOTE:"
    echo "Running following command after starting Xcode 8 and waiting a bit can show you what appgroup is selected in each profile."
    echo "There should only the one correct app group or the release group. No duplicates in one file or mixed."
    echo "If you are not using multiple app groups, you can view the provisioning profile files in text editor to see that they contain correct settings for the configuration you are trying to build"
    echo "grep -a appgroup ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision"
    echo
    echo
1
Peter Lamberg