私のアプリの開発プロビジョニングプロファイルは数週間前に期限切れになったので、プロビジョニングポータルにアクセスして新しいものを入手しました。入手後、Xcode Organizerにアクセスし、期限切れのプロファイルをデバイスとMacから削除してから、新しいプロファイルをインポートしました。 Xcodeはプロファイルをデバイスにすぐにインストールし、アプリはデバイス上で再度実行されます。
問題は、オーガナイザーが新しいプロファイルを表示して通常どおりにインストールできる一方で、IDEが古いプロファイルと新しいプロファイルの間で混乱することです。アプリをビルドしようとするたびに、すぐに失敗します。リストされているGUIDは古いプロファイルに属しているため、Xcodeは古いプロファイルを見つけることができません。これは奇妙です。Xcodeは認識していたと思います。今までに新しいプロファイルの。
デバイスとMacから新しいプロファイルを削除してから、プロファイルを再インストールしてみました。動作しません。Xcodeはまだ古いものを探しています。また、Xcodeに古いプロファイルを忘れさせるために別のプロファイルを選択してから、新しいプロファイルを選択してみました。 Otherの選択肢に新しいプロファイルのGUIDを手動で入力しようとしましたが、Xcodeはまだ古いプロファイルを探すことを主張しています。私のMacからなくなった。
アプリが使用するための新しいプロビジョニングプロファイルを生成したことをXcodeに納得させるにはどうすればよいですか?
tl; dr:プロジェクトファイルを手動で編集して、Xcodeに新しいプロファイルを通知する必要がありました。さて、なぜプロジェクトファイルを手動で更新しなければならなかったのかわかりません。おそらく、新しいプロファイルをXcodeにインポートするプロセス中に何か問題が発生したため、新しいプロファイルが入っていることに気づきませんでした。または、ファイルシステムが途中で停止し、Xcodeがそれ自体を更新できませんでした。しかたがない。
今のために 楽しい 技術的な部分:
重要:ファイルの変更を伴う他のすべての場合と同様に、変更しないでください:
.xcodeproj
バンドルおよび/またはXcodeプロジェクト全体をバックアップするか、作成してくださいXcodeプロジェクトが適切なバージョン管理に保たれていることを確認してください。何も頼らずに、混乱してXcodeにプロジェクトのデバイスへのビルドを停止させたくはありません。
アプリの.xcodeproj
バンドルの内容を確認しました(現時点ではXcodeは実行されていません)。これらを表示するには、Finderでプロジェクトフォルダを開き、Controlキーを押しながら.xcodeproj
ファイルをクリックして、パッケージの内容を表示:を選択します。
Breeze.xcodeproj/ Daniel.mode1v3 Daniel.pbxuser project.pbxproj
次に、テキストエディタ(バイナリではなくテキスト)でproject.pbxproj
を開き、ビルド構成情報を探しました。
/* Begin XCBuildConfiguration section */
というラベルの付いたセクションがあります(エディターの検索機能を使用して見つけることができます)。これはエントリのリストであり、各エントリは、特定のビルド構成内の特定のプロファイルのコード署名構成を表します。
開発用のバイナリに署名するために使用するプロファイルに関する情報は次のとおりです。
1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Daniel Tan (XXXXXXXXXX)";
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Breeze_Prefix.pch;
GCC_VERSION = com.Apple.compilers.llvmgcc42;
INFOPLIST_FILE = "Breeze-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
PRODUCT_NAME = "Breeze";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
SDKROOT = iphoneos;
};
name = Debug;
};
注目すべきはこの行です:
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
これは、ビルドエラーによって報告されたGUIDです。古い期限切れのプロビジョニングプロファイルの識別子です。
私がしなければならなかったのは、それを新しいプロファイルのGUIDに置き換えることだけでした:
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E6E6369E-FD58-4886-9C3A-72C9DAE36501";
プロジェクトをXcodeで再度開くと、新しいプロビジョニングプロファイルを使用して、アプリが正常にビルドされ、デバイスにインストールされます。
Xcode4でそれを行った方法は次のとおりです。
コード署名IDで「コード署名しない」に変更することで、このエラーを修正することができました。ビルドすると、「製品タイプにはコード署名が必要です...何とか...」というエラーが表示されます。次に、戻って適切なプロファイルを選択します。ビルドしてすべて良い。これは、証明書の有効期限が切れて更新したために発生しました。上記に加えて、キーチェーンとオーガナイザーから古い証明書も削除する必要がありました。
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E8DEEBA3-FE0A-419F-9F7E-258572D55807";
この問題に対する私の解決策は次のとおりです。
/Users/<your.username>/Library/MobileDevice/Provisioning Profiles
上記のソリューション に追加するには、素敵な xcodeproj gemを使用してこのようなことを支援できます。 OpenStepを変換することに注意してくださいkey = value;
スタイルのplistからXMLへ。注:後でXcodeでプロジェクトファイルを変更すると、Xcodeによって元に戻されることがわかりました。どちらのスタイルのファイルも、Xcodeまたはコマンドラインから正常にビルドされます。使い方のサンプルは
project = Xcodeproj::Project.new('Foo.xcodeproj')
csi_key = 'CODE_SIGNING_IDEDNTITY'
project.targets.each do |target|
target.build_configurations.each do |conf|
conf.build_settings[csi_key] = 'iPhone Developer: Cool Dood (XYZ123)' unless conf.build_settings[csi_key] == nil
end
end
これが私がそれをどのように使うかの要点です: https://Gist.github.com/82times/5594887
私の場合、XCode 5では、開発者証明書の有効期限が切れたときに、この問題が発生しました。新しい証明書と新しいプロビジョニングプロファイルを手動でダウンロードしました。キーチェーンに証明書を追加し、オーガナイザーのデバイスにプロビジョニングプロファイルを追加しました。
しかし、XCodeは私がアプリに署名できないと不平を言い続けました。 XCode 5の設定では、古いプロビジョニングプロファイルが表示されたままであり、そこで何度もリロードしたにもかかわらず、新しいプロビジョニングプロファイルに更新されなかったことがわかりました。
最終的に、iPhone構成ユーティリティを使用して、古いプロビジョニングプロファイルを削除し、新しくダウンロードしたプロビジョニングプロファイルを追加しました。コード署名が期待どおりに機能した後。
古いバージョンのように見えるので、ほとんどの答えは私にはうまくいきませんでした。
Xcode 8.3.2の場合:
これを行った後、[ターゲット]-> [一般]-> [署名]の下の[Xcode管理プロファイル]の横にある[i]情報アイコンをクリックし、[作成]日付が新しいプロファイルを反映していることを確認することで、Xcodeが最新のプロファイルを使用していることを確認できました。
ダウンロードしたプロビジョニングプロファイルをダブルクリックすると、xCode Organizer Archiveに配置されると思いましたが、それではうまくいきませんでした。次の手順は、最終的に私のために働いた。