0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xcodeの「Your team has no devices」でArchiveできない問題を、原因から解消する

0
Posted at

個人開発のiOSアプリをApp Storeに出そうとして、Archiveの直前でこのエラーに当たって小一時間溶かしました。同じところで止まっている人がすぐ抜けられるように、原因と直し方を残しておきます。

出たエラーはこれです。

Communication with Apple failed: Your team has no devices from
which to generate a provisioning profile. Connect a device to use
or manually add device IDs in Certificates, Identifiers & Profiles.
No profiles for 'com.example.App' were found: Xcode couldn't find
any iOS App Development provisioning profiles matching 'com.example.App'.

先に結論

チームに登録済みデバイスが1台もないのが原因です。実機をUDID登録すれば直ります。証明書やプロファイルの作り直しは要りません。

Communication with Apple failed という見出しに引っ張られると、「Appleの障害か」「サインインし直すのか」と無関係な方向に時間を溶かします(私がそうでした)。本当に効いているのは、その次の一文 ―― "Your team has no devices" のほうです。

急いでいる人向けに手順だけ:

  1. iPhoneをMacにUSB接続するか、デバイスのUDIDを控える
  2. Apple Developer のDevices で「+」からUDIDを登録
  3. もう一度Archive → 通る

以下、なぜそうなるのかと、ハマりやすいポイントを書きます。

なぜ「デバイス0台」で詰むのか

エラー文をよく読むと、探しているのは iOS App "Development" のプロビジョニングプロファイルです。ここがポイントで、

  • Development プロファイルは、実機でデバッグ実行するためのもの。最低1台の登録デバイスが必要
  • Distribution(App Store)プロファイルは、配布用。デバイスは不要

自動署名(Automatically manage signing)は、まず手元のチーム用にプロファイルを用意しようとします。ところがチームにデバイスが1台も無いと、その最初のプロファイル生成自体が失敗する。結果、Communication failed という曖昧な見出しでまとめて転んでくるわけです。Developer Programに登録したての、証明書もデバイスもまっさらな状態だと、ここに高確率でハマります。

原因の切り分け(コマンドでやると速い)

XcodeのGUIは「Communication failed」までしか教えてくれないので、コマンドで事実を並べたほうが早いです。

まずキーチェーンの証明書。ここで Apple Distribution が無く Apple Development しか出ないなら、配布用の証明書がまだ無い状態です(後述しますが、これは自動で作られるので今は気にしなくてOK)。

security find-identity -v -p codesigning

プロビジョニングプロファイルの実体。空っぽなら、そもそも何も生成できていません。

ls -la ~/Library/MobileDevice/Provisioning\ Profiles/

プロジェクト側の署名設定。自動署名で、Teamが正しく入っているかを確認します。

grep -E "CODE_SIGN_STYLE|DEVELOPMENT_TEAM" *.xcodeproj/project.pbxproj
# CODE_SIGN_STYLE = Automatic;
# DEVELOPMENT_TEAM = XXXXXXXXXX;   ← 自分のTeam IDが入っていればOK

設定が正しいのにエラーが出るなら、残る容疑者は「デバイス0台」です。確証を得るために、GUIではなくコマンドラインでArchiveして、生のエラー文を取りに行きます。

xcodebuild -project YourApp.xcodeproj -scheme YourApp \
  -destination 'generic/platform=iOS' \
  -archivePath /tmp/YourApp.xcarchive \
  -allowProvisioningUpdates archive

-allowProvisioningUpdates を付けても、ここで同じ Your team has no devices が出れば、原因はほぼ確定です。

解決:デバイスを1台登録する

直し方はシンプルで、チームにデバイスを1台登録するだけです。注意点が一つあって、私の環境では iPhoneをUSBで繋いだだけでは自動登録されませんでした(-allowProvisioningUpdates でも登録されず、同じエラーのまま)。確実なのは、ポータルでUDIDを手動登録する方法です。

接続中のデバイスのUDIDは、これで取れます。

xcrun xctrace list devices
# iPhone XXXX (26.5) (00008XXX-XXXXXXXXXXXXXXXX)  ← 括弧内がUDID

このUDIDを Developer ポータルのDevices で「+」から登録します(Platform: iOS、Device Name: 任意、Device ID: 上のUDID)。

登録した直後にもう一度Archiveしたら、さっきまで頑として通らなかったのが、何事もなかったように成功しました。

** ARCHIVE SUCCEEDED **

実機テスト目的でなくApp Store配布が目的でも、自動署名はデバイス1台を要求してきます。理不尽に感じますが、後でTestFlightの実機確認にもどうせ要るので、繋いでおいて損はありません。

Archiveできたあと:アップロードまで

ひとつ補足。コマンドラインでArchiveしたとき、署名は Apple Development の証明書で行われています。App Storeに上げるには Apple Distribution での再署名が必要ですが、これは次の「Distribute App」工程でXcodeが自動でやってくれます。さっき Apple Distribution 証明書が無くても気にしなくていい、と書いたのはこのためです。

CLIでArchiveしたものはOrganizerに出てこないので、Organizerが見る場所(~/Library/Developer/Xcode/Archives/<日付>/)にコピーしてから、

  1. Xcode → Window → Organizer → 該当のArchiveを選択
  2. Distribute App → App Store Connect → Upload
  3. 署名は自動。ここで配布用の証明書とプロファイルが裏で作られる

Upload Successful まで行けます。

ついでに、毎回出てくる輸出コンプライアンスの質問が煩わしければ、Info.plist に一行入れておくと次のビルドから聞かれなくなります(標準的なHTTPS通信しか使っていないアプリ向け)。

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

デバイスを使いたくない場合の別解

「テスト用に実機を登録したくない」「手元にデバイスが無い」という場合は、自動署名をやめて手動でApp Store用のプロファイルを使う手があります。App Store(Distribution)プロファイルはデバイス情報を含まないので、デバイス0台でも作れます。

手順としては、

  1. Apple Distribution 証明書を作る(Xcode → Settings → Accounts → Manage Certificates → +)
  2. ポータルでApp Store用のProvisioning Profileを作成(com.example.App 用)
  3. Xcodeで「Automatically manage signing」を外し、手動でその証明書とプロファイルを指定

ひと手間多いですが、デバイス登録の縛りを完全に回避できます。私はTestFlightの実機確認にどうせデバイスが要ると分かっていたので、素直に1台登録する方を選びました。

まとめ

  • Communication with Apple failed は見出しのノイズ。本体は "Your team has no devices"
  • 自動署名は、チームにデバイスが1台も無いとプロファイルを生成できない。
  • 直し方は UDIDを1台、ポータルに手動登録するだけ。USB接続だけでは登録されないことがある。
  • 配布用のDistribution証明書/プロファイルは、Distribute Appのときに自動生成されるので事前準備は不要。
  • デバイスを登録したくなければ、手動署名+App Store配布プロファイルで回避できる。

同じエラーで検索して辿り着いた人の、小一時間が浮けば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?