Skip to content

無料 Apple ID(Personal Team)での iOS 実機ビルドと制約

Apple Developer Program(年 $99)に加入しなくても、無料の Apple ID(Personal Team)で 自作アプリを実機で動かせる。何ができて何ができないかの整理。

できること

  • 実機へのインストール・実行(プロビジョニングは約 7 日で失効 → 再ビルドで更新)
  • Core Location(位置・コンパス heading)、Core Motion(加速度/シェイク)、ローカル通知
  • センサーや UI/演出の実機確認

できないこと(Developer Program 必須)

  • CloudKit / iCloud capability(entitlement が有料限定)
  • Push 通知(APNs)
  • Associated Domains(Universal Links)

→ CloudKit・push に依存する機能は無料では検証不可。センサー+UI までが無料の範囲。

セットアップ手順

  1. Xcode に Apple ID をサインイン(Settings → Accounts → +)。Personal Team が登録される。
  2. iPhone を USB 接続し「このコンピュータを信頼」。
  3. iPhone:設定 → プライバシーとセキュリティ → デベロッパモード をオン → 再起動。
  4. 初回起動時「信頼されていないデベロッパ」が出たら 設定 → 一般 → VPN とデバイス管理 で証明書を信頼。

Team ID の取得

bash
security find-identity -p codesigning -v   # "Apple Development: <mail>" があるか
# 一度 Xcode で Signing & Capabilities → Automatically manage signing → Team を選ぶと
# project.pbxproj に DEVELOPMENT_TEAM が入る。そこから 10 桁の Team ID を拾える
grep -m1 DEVELOPMENT_TEAM app/HiYu.xcodeproj/project.pbxproj

XcodeGen + SwiftPM 構成での実機ビルド

CLI だけで完結させる場合のポイント:

  • xcode-select が CLT を指していると xcodebuild が使えない。グローバル切替(sudo)の代わりに 各コマンドで DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer を指定すれば回避できる。
  • project.yml(XcodeGen)に自動署名を書いておくと再生成しても署名設定が保たれる:
yaml
settings:
  base:
    PRODUCT_BUNDLE_IDENTIFIER: <your.bundle.id>
    CODE_SIGN_STYLE: Automatic
    DEVELOPMENT_TEAM: <TEAM_ID>
  • ビルド&インストール:
bash
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
xcodegen generate                          # ファイル追加時のみ
xcodebuild -project App.xcodeproj -scheme App \
  -destination 'generic/platform=iOS' -allowProvisioningUpdates build
xcrun devicectl device install app --device <DEVICE_UUID> \
  "<DerivedData>/Build/Products/Debug-iphoneos/App.app"
  • -allowProvisioningUpdates で実機登録とプロファイル作成を自動化(Apple ID サインイン済み前提)。
  • xcrun devicectl list devices で接続実機の UUID を取得。

実機検証環境(hi-yu・2026-06 時点)

項目
実機iPhone 16 Pro(iOS 26.5, iPhone17,1)
devicectl UUID96677E6B-A646-5B92-80F5-88E1F86E11B7
xctrace ECID00008140-0014605E0862201C
Bundle ID / Teamhiyu.yur4.net / 5W85D9C7S8
署名Apple Development: myura3939@gmail.com(Personal Team)

xcrun xctrace list devices ではロック中などに "Devices Offline" に出るが、 xcrun devicectl list devicesavailable (paired) なら install/launch は通る。

検証済み CLI(このマシンは xcode-select が CLT を指すので DEVELOPER_DIR 指定が必須):

bash
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
cd ~/Documents/project/hi-yu/app
# ① コンパル確認は署名不要なシミュレータが速い
xcodebuild -project HiYu.xcodeproj -scheme HiYu \
  -destination 'platform=iOS Simulator,name=iPhone 17' build
# ② 実機ビルド(id= は xctrace ECID)
xcodebuild -project HiYu.xcodeproj -scheme HiYu \
  -destination 'platform=iOS,id=00008140-0014605E0862201C' \
  -allowProvisioningUpdates build
# ③ install/launch は devicectl UUID
APP=~/Library/Developer/Xcode/DerivedData/HiYu-*/Build/Products/Debug-iphoneos/HiYu.app
xcrun devicectl device install app --device 96677E6B-A646-5B92-80F5-88E1F86E11B7 "$APP"
xcrun devicectl device process launch --device 96677E6B-A646-5B92-80F5-88E1F86E11B7 hiyu.yur4.net

ハマりどころ

  • Developer Mode 無効だと devicectl installerror 10005 で失敗。端末側で有効化+再起動。
  • Command Line Tools 単体にはテスト FW(XCTest / swift-testing)が無い。 ロジックの自動検証は test ターゲットではなく 実行ターゲット(swift run)+ assert で代替できる。
  • シミュレータは 磁気コンパス(heading)を供給しない → 方向系はデモ/手動入力で確認、実方位は実機。
  • シミュレータの位置許可ダイアログが SpringBoard に残ることがある → xcrun simctl privacy ... reset/grant やシミュレータ再起動でクリア。

関連

  • 適用プロジェクト → [[hi-yu]]