iOSアプリのProvisioning Profile

(2020-03-24)

アプリを実機にデプロイするために必要なもの。 App ID (prefix + Bundle ID)やインストール可能なDevice ID、 コード署名に用いた Apple発行の証明書などを含む。これらが一致しないとインストールできない。

Xcode上で見られる情報

次のTypeのProfileが存在する。

  • development profile: 開発用のprofile。TeamのDeviceで動かす。
  • ad hoc profile: テスト用のprofile。UDIDを登録したDeviceに配布できる。 AccountにDevice family (iPhone, iPad, etc.)ごとに100台まで登録可能。
  • App Store profile: App Storeに上げるためのprofile。
$ ls ~/Library/MobileDevice/Provisioning\ Profiles
****.mobileprovision
...

$ security cms -D -i ~/Library/MobileDevice/Provisioning\ Profiles/****.mobileprovision
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AppIDName</key>
	<string>XC net sambaiz test-app</string>
	<key>ApplicationIdentifierPrefix</key>
	<array>
	<string>****</string>
	</array>
	<key>CreationDate</key>
	<date>2020-03-18T11:05:13Z</date>
	<key>Platform</key>
	<array>
		<string>iOS</string>
	</array>
	<key>IsXcodeManaged</key>
	<true/>
	<key>DeveloperCertificates</key>
	<array>
	  <data>****</data>
    <data>****</data>
  </array>

								
	<key>Entitlements</key>
	<dict>
				
				<key>application-identifier</key>
		<string>****.net.sambaiz.test-app</string>
				
				<key>keychain-access-groups</key>
		<array>
				<string>****.*</string>
		</array>
				
				<key>get-task-allow</key>
		<true/>
				
				<key>com.apple.developer.team-identifier</key>
		<string>****</string>

	</dict>
	<key>ExpirationDate</key>
	<date>2020-03-25T11:05:13Z</date>
	<key>Name</key>
	<string>iOS Team Provisioning Profile: net.sambaiz.test-app</string>
	<key>ProvisionedDevices</key>
	<array>
		<string>****</string>
	</array>
	<key>LocalProvision</key>
	<true/>
	<key>TeamIdentifier</key>
	<array>
		<string>****</string>
	</array>
	<key>TeamName</key>
	<string>Taiki Sakamoto</string>
	<key>TimeToLive</key>
	<integer>7</integer>
	<key>UUID</key>
	<string>*****-****</string>
	<key>Version</key>
	<integer>1</integer>
</dict>

automatic manage signing を有効にすると、Xcodeが自動で証明書を要求しダウンロードしてきて署名しProvisioning Profileを生成する。 証明書はkeychainに保存されていて、CIで署名するのに必要ならそこから秘密鍵(.p12)を出力できる。

証明書やProvisioning Profileは developer.apple.com/account からマニュアルで生成することもできる。

$ security find-identity -v -p codesigning 
1) ***************************** "Apple Development: ****@****.com (******)"
...

参考

iOS .mobileprovisionのデベロッパー証明書を確認する - Qiita