Python × Briefcase で iOS アプリをビルドするまでの道のり

目次

初めてXcodeを起動しました。
拙い部分があるかと思いますが、ご容赦ください。

Briefcaseについて

https://beeware.org/project/briefcase

Python プロジェクトをスタンドアロンのネイティブ アプリケーションに変換します。公式に書かれている通り、各プラットフォーム向けに展開できるようになっています。
開発が盛んに行われており、頻繁に変更が加わるかもしれません。

開発環境

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 を追加する。

  1. 左のペインでSupportフォルダを右クリックし、 Add Files to “AppName” … を選択
  2. Supportフォルダ内の platform-site、README、VERSIONS などを選択してAdd
  3. 「Reference files in place」「Create folders」を選択し、Targetにチェックして次へ

リソースの重複を解消

Copy Bundle Resources を展開し、同じ名前のファイルがリストにないか確認する。

下記の場合、 sitecustomize.py が重複していると思うので、iphonesimulator の方を「−」で削除して、 iphoneos.arm64 の方を残す。シミュレーターは使わないため。

🧨 iPhoneをデベロッパモード:ONにしておく

設定>プライバシーとセキュリティ>デベロッパモードをONにして再起動する。

クリーンビルド

  1. iPhoneをPCに接続して、ステータスバーで接続したiPhoneを選択
  2. Xcodeのヘッダーメニュー>Product>Clean Build Folder
  3. ▶️ でビルド実行
  4. 設定>一般>VPNとデバイス管理において、デベロッパアプリを「信頼する」にする

おわり

iOS実機で立ち上げると、真っ白なウィンドウが立ち上がるだけです。
app.pyを修正することで、いろいろ要素を配置していくことになります。

しかし、現時点(2025/03/25)では制約が多く
例えば、iOSでは写真を選択することができなかったりします。Macでは可能です。

開発が盛んに行われているツールなので、今後のアップデートで機能が増えていくといいなと思いました。

お読みいただきありがとうございました。