つばくろぐ @takamii228

知は力なり

LinuxからApp Store Connectへipaファイルをアップロードする

以前Windowsからipaファイルをアップロードする方法を検証したので、Linuxでもやってみることにします。

takamii.hatenablog.com

検証環境

今回もTransporterのCLIを使います。

help.apple.com

必要となる環境の要件は以下の通りです。

System and network requirements
Apple supports Transporter on the following operating systems:

macOS 10.6 or later (64-bit system)

Microsoft Windows 7, 8, 10 or later (64-bit system)

Red Hat Enterprise Linux (64-bit system)

To install and run Transporter, you should have:

150 megabytes (MB) of available disk space and 2GB of RAM

A 2048MB maximum heap size, by default

また Transporter is Apple’s Java-based command-line tool for large catalog deliveries. とあるのでJavaも必要そうです。

OSはRed Hat Enterprise Linuxとありますが、今回はAWSのEC2で動くか試してみたいと思います。

環境構築

AWSのEC2をAmazon Linux2で立ち上げて接続し、Javaをインストールします。

$ yum install java

AWSなのでCorrettoが降ってきますね。

$ java -version
openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment Corretto-11.0.12.7.1 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.12.7.1 (build 11.0.12+7-LTS, mixed mode)

Transporterのインストール手順を順番に実行していきます。

インストールのシェルスクリプトをダウンロードする必要があるのですが、これはApple Developer Programの認証が必要なので、macOSでダウンロードしたものをLinuxにアップロードすることにします。

$ sudo sh iTMSTransporter_installer_linux_2.2.0.10.sh 

を実行すると利用許諾のプロンプトがでるので許可します。するとコマンドが実行できるようになりました。

$ /usr/local/itms/bin/iTMSTransporter -version
[2021-09-04 11:53:59 UTC] <main> DEBUG: DataCenters already set by: defaultProperties
[2021-09-04 11:54:01 UTC] <main>  INFO: Configuring logging...
[2021-09-04 11:54:01 UTC] <main>  INFO: Logging level set to off
 
iTMSTransporter, version 2.2.0
 
[2021-09-04 11:54:05 UTC] <main> DBG-X: Returning 0

ipaファイルをアップロードする

macOSで作成したipaファイルを構築したEC2へアップロードしてTransporterコマンドを実行してみます。 AppStoreInfo.plist が必要な点とパスワードはApple IDのApp用パスワードな点に要注意です。

$ /usr/local/itms/bin/iTMSTransporter -m upload -assetFile ./sample.ipa -u "xxxxx" \
   -p "xxxxx" -assetDescription ./AppStoreInfo.plist -v eXtreme

実行すると以下のようなログがでて、数秒後に無事アップロードが成功していることが確認できました。

[2021-09-04 12:14:18 UTC] <main> DEBUG: DataCenters already set by: defaultProperties
[2021-09-04 12:14:20 UTC] <main>  INFO: Configuring logging...
[2021-09-04 12:14:20 UTC] <main>  INFO: Logging level set to eXtreme
[2021-09-04 12:14:25 UTC] <main> DEBUG: SMART-CLIENT: initializing data center locking ops: [authenticateForSession, validateAssets]
[2021-09-04 12:14:25 UTC] <main> DEBUG: SMART-CLIENT: initializing data centers with: [contentdelivery01.itunes.apple.com]
[2021-09-04 12:14:25 UTC] <main>  INFO: iTMSTransporter : iTunes Store Transporter [2.2.0]
[2021-09-04 12:14:25 UTC] <main>  INFO: OS identifier: Linux 4.14.243-185.433.amzn2.x86_64 (amd64); jvm=14.0.2+12-46; jre=14.0.2+12-46
[2021-09-04 12:14:25 UTC] <main>  INFO: Memory: [JVM] 958M free, 989M total, 1979M max [System] (Physical) 69M free, 983M total (Swap) 0 free, 0 total
[2021-09-04 12:14:25 UTC] <main> DBG-X: Memory: [JVM] 958M free, 989M total, 1979M max [System] (Physical) 69M free, 983M total (Swap) 0 free, 0 total
[2021-09-04 12:14:25 UTC] <main> DBG-X: Using operation named: authenticateForSession
[2021-09-04 12:14:25 UTC] <main> DBG-X: Apple's web service operation input parameters:
...
[2021-09-04 12:14:50 UTC] <main>  INFO: Done performing uploadDone notification to Apple.
[2021-09-04 12:14:50 UTC] <main>  INFO: Transporter's command line arguments are: -m upload -assetFile ./sample.ipa -u xxxxx -p **hidden value** -assetDescription ./AppStoreInfo.plist -v eXtreme
[2021-09-04 12:14:50 UTC] <main>  INFO: The package: /tmp/DeveloperAPIUpload587828657019442221/1574836491.itmsp has been successfully uploaded.



Package Summary:
 
1 package was uploaded successfully:
    /tmp/DeveloperAPIUpload587828657019442221/1574836491.itmsp

App Store Connectにもアップロードされていることを確認しました。

f:id:takamii228:20210904212911p:plain

以上の検証から、Amazon Linux上でもApp Store Connectにipaファイルがアップロードできることがわかりました。アップロード用にTransporterを構築済みのコンテナを作っておけばAWS CodeBuildで利用できそうですね。

まとめ

何らかの闇の力によってXcodeからのipaファイルのアップロードがブロックされている環境では、ipaファイルをS3などを経由してAWS CodeBuildからアップロードするCDパイプラインを作ればよさそうです。macOS on EC2は高いですしね。

わざわざそんなことしなくてもと思われた方が大半だと思うので、素直に自由なインターネットにつながっているmacOSからアップロードしましょう。

え?S3にはアップロードできるんだって?いいツッコミですn(ry