Python × Briefcase で iOS アプリをビルドするまでの道のり
目次
- Briefcaseについて
- 開発環境
- Briefcaseのセットアップ
- 🧨 AttributeError: module 'distutils.ccompiler' has no attribute 'compiler_class'
- 🧨 UnicodeEncodeError: 'utf-8' codec can't encode character '\udce8' in position 437: surrogates not allowed
- iOS用のプロジェクト作成
- pyproject.tomlの変更【重要】
- Xcodeプロジェクトを生成
- iOSアプリのビルド
- Xcodeの準備
- ビルド前の作業
- 🧨 iPhoneをデベロッパモード:ONにしておく
- クリーンビルド
- おわり
初めてXcodeを起動しました。
拙い部分があるかと思いますが、ご容赦ください。
Briefcaseについて
https://beeware.org/project/briefcase
Python プロジェクトをスタンドアロンのネイティブ アプリケーションに変換します。公式に書かれている通り、各プラットフォーム向けに展開できるようになっています。
開発が盛んに行われており、頻繁に変更が加わるかもしれません。
開発環境
- Python 3.9.13
- Xcode Version 16.2 (16C5032a)
- macOS Sequoia 15.3
iOS実機で動かすことを目的としており、シミュレーターは使いません。
Briefcaseのセットアップ
仮想環境を立ち上げて、pipをアップグレードする。
python -m venv venv
source venv/bin/activate
pip install -U pip
briefcaseとその他ライブラリをインストールする。
pip install briefcase toga
pip install -U cookiecutter wheel
pip install setuptools
# iOSアプリをビルドする場合は必要
pip install toga-iOS
# 他に必要なライブラリがあればインストール
pip install httpx numpy
Briefcaseプロジェクトを作成する。
briefcase new
🧨 AttributeError: module 'distutils.ccompiler' has no attribute 'compiler_class'
上記が発生する場合は、setuptoolsのバージョンを指定すると解決するかもしれない。
pip install setuptools==75.8.2
🧨 UnicodeEncodeError: 'utf-8' codec can't encode character '\udce8' in position 437: surrogates not allowed
cookiecutter(Briefcase のテンプレート生成に使用されるライブラリ)が Unicodeエンコードエラー を起こしているため、Briefcaseプロジェクトを作成するときに以下のようにする。
LANG=en_US.UTF-8 briefcase new
成功すると以下のようになる。
言われた通りに操作すると、中身が空のウィンドウが立ち上がる。
[{app_name}] Generated new application 'xxxx'
To run your application, type:
$ cd {app_name}
$ briefcase dev
iOS用のプロジェクト作成
pyproject.tomlの変更【重要】
pyproject.toml の requires にコード内で使用するライブラリを明記する。
(以下は例)
requires = [
"httpx", # ← ここに追加
"numpy",
"toga",
]
Xcodeプロジェクトを生成
pyproject.toml を変更したら以下を実行する。
以降も、pyproject.toml を更新するたびに再実行する。
briefcase create iOS
また、app.pyなどのソースコードを変更した場合は、以下を実行してからXcodeでビルドしなおす。
briefcase update iOS -r
iOSアプリのビルド
Xcodeの準備
Xcodeがない場合はAppStoreからインストールし、既にある場合はコマンドラインツールを最新にしておく。
その後に以下を実行し、今から使用するXcode(コマンドラインツール)を指定する。
sudo xcode-select --switch /Applications/Xcode.app
また、Xcode初回起動時にはライセンスを承認するかどうか聞かれるため「Agree」を選択する。
ビルド前の作業
Apple IDで署名
左のペインからプロジェクトを選択>TARGETS>Signing & CapabilitiesでTeamとBundle identifier を設定する。

Supportフォルダの追加
以下のようにして {app_name}/build/{app_name}/ios/xcode/Support を追加する。
- 左のペインでSupportフォルダを右クリックし、
Add Files to “AppName” …を選択 - Supportフォルダ内の platform-site、README、VERSIONS などを選択してAdd
- 「Reference files in place」「Create folders」を選択し、Targetにチェックして次へ

リソースの重複を解消
Copy Bundle Resources を展開し、同じ名前のファイルがリストにないか確認する。
下記の場合、 sitecustomize.py が重複していると思うので、iphonesimulator の方を「−」で削除して、 iphoneos.arm64 の方を残す。シミュレーターは使わないため。

🧨 iPhoneをデベロッパモード:ONにしておく
設定>プライバシーとセキュリティ>デベロッパモードをONにして再起動する。
クリーンビルド
- iPhoneをPCに接続して、ステータスバーで接続したiPhoneを選択
- Xcodeのヘッダーメニュー>Product>Clean Build Folder
- ▶️ でビルド実行
- 設定>一般>VPNとデバイス管理において、デベロッパアプリを「信頼する」にする
おわり
iOS実機で立ち上げると、真っ白なウィンドウが立ち上がるだけです。
app.pyを修正することで、いろいろ要素を配置していくことになります。
しかし、現時点(2025/03/25)では制約が多く
例えば、iOSでは写真を選択することができなかったりします。Macでは可能です。
開発が盛んに行われているツールなので、今後のアップデートで機能が増えていくといいなと思いました。
お読みいただきありがとうございました。