LinuxからApp Store Connectへipaファイルをアップロードする
以前Windowsからipaファイルをアップロードする方法を検証したので、Linuxでもやってみることにします。
検証環境
今回もTransporterのCLIを使います。
必要となる環境の要件は以下の通りです。
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にもアップロードされていることを確認しました。
以上の検証から、Amazon Linux上でもApp Store Connectにipaファイルがアップロードできることがわかりました。アップロード用にTransporterを構築済みのコンテナを作っておけばAWS CodeBuildで利用できそうですね。
まとめ
何らかの闇の力によってXcodeからのipaファイルのアップロードがブロックされている環境では、ipaファイルをS3などを経由してAWS CodeBuildからアップロードするCDパイプラインを作ればよさそうです。macOS on EC2は高いですしね。
わざわざそんなことしなくてもと思われた方が大半だと思うので、素直に自由なインターネットにつながっているmacOSからアップロードしましょう。
え?S3にはアップロードできるんだって?いいツッコミですn(ry