つばくろぐ @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

macOSで開発環境を構築するときにやっていること

最近macOSを初期化して再構築する機会が多々あるので、手順をここにまとめておくことにします。

初期化前にすること

初期化前にmacOSの最新化をしておきます。

OSのソフトウェア・アップデート画面からなぜかアップデートできない場合はApp Store経由でアップデートできるようです。

hakolog.net

macOSを初期化する

以下の公式手順を使ってmacOSを初期化&OS再インストールします。OSの再インストールにWiFiしか使えない点に注意が必要です。

support.apple.com

初期設定を行う

  • 言語を英語に変更
  • マシン名を変更
  • Finderで拡張子を表示するように変更
  • Finderで隠しファイルを表示するように変更(Command + Shift + .)
  • Finderで最近使ったファイルを非表示に変更
  • Dockの表示を右に変更し自動で非表示にするように変更
  • スクリーンセーバーをオフに変更
  • 省電力モードをオフに変更
  • bluetoothをメニューバーに表示
  • OSの自動更新をオフに設定

ソフトウェアをインストールする

以下の順番でソフトウェアをインストールします。

terminalの設定

カラースキームを変更したり、.zshrc、.zprofileを編集してパス設定、環境変数設定、シェルの表示、gitの補完設定などを行う。

まとめ

詳細はgithubにもまとめています。

github.com

ISUCON11に参加した #isucon

今年もISUCONに元同僚の id:int128 先生と id:translucens 先生と gosoudan3というチームで参加してきました。

昨年のブログはこちら。

takamii.hatenablog.com

今年は事前準備で以下の目標を立てました。

  • 今年は150位くらいを目標
  • サーバーのリソースを有効に使えるような構成にしたい
  • DB冗長化を疑う

戦略としては王道の以下の3つの方針です。

  • Webサーバー設定での改善
  • DBの改善
  • アプリの改善

結果としては 28336 で 159位相当でした。去年が246位相当だったので、ほぼ目標通りの結果となりました。

isucon.net

portal.isucon.net

行った主な改善は以下のとおりです。

  • AP 2台、DB 1台構成に変更
  • DBにIndex付与
  • N+1の改善
  • 都度インサートをバルクインサートに変更

/trendと/isuの1秒以上リクエストを潰し切るのがなかなかできなかったのと、グラフ表示の加点については結局手が出せないまま時間切れでした。

パフォーマンスの計測はnginxの$request_timeログとCloud ProfilerによるCPU時間で順番にボトルネックを潰すやり方でした。

CDについては昨年同様GitHub Actionsによるtag pushデプロイでした。

終わった後の反省としては以下が上がりました。

  • tagとスコアの関係がわからなくなった
  • performance_schemeオフするのを忘れた
  • API Mockの注意書きを忘れてた
  • ブランチ戦略はスコアが上がったらmainにマージにする方針がよさそう
  • パラメータ変更のところは環境変数に切り出しでもよかったかも
  • Cloud Profilerはあってもなくてもスコアはあんまり変わらなかった

途中のベストスコアは34226点でした。ただこれ以上大きくスコアは伸ばせなかったのは悔しさが残るところです。

来年も開催されることがあれば、また上位を目指したいと思います。

運営の皆さん、参加された皆さんお疲れさまでした。