モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

PUBG戦績管理アプリ「Chicken Assist for iOS」をリリースしました。

 開発経緯とか色々書きます。

1. 最初は iOS 開発環境を評価したかった。

 もともとの開発するための動機は「せっかく MacBook Pro をメイン機として買ったので,iOS アプリを作りたい!」という純粋なものがありました。ただ,作るからにはなんらかの実用性がないと自分モチベーションが湧かないんですよね。遊びのアプリ作って「それ? 誰のために作ってるの?」ってなりかねません。よくある,アプリのマーケティングの失敗例ですね。

 では,方向性を変えると,趣味アプリでの一番の顧客を「自分」つまり,このアプリであれば,モノトーンさんが一番の顧客だと思って開発するわけですね。そりゃもう,「こういう機能欲しいああいう機能欲しい…」っていうことがいっぱいあるわけで。

 ただ,PUBG の戦績管理をしたいというのは,そもそも PUBG Developer API というものが公開されているというのを知ったのが一番開発を始めようと思ったきっかけでもあります。

https://documentation.playbattlegrounds.com/en/introduction.html

 ここで話題を変えますが,iOS 開発するなら Obj-C や Swift じゃないの? っていう風に思うかもしれません。ところが今回 Xamarin を採用しました。それはもともとの計画に UWP (Universal Windows Platform と言います。Windows 10 で動くアプリケーション実行環境と思ってもらえばいいです) 向けにリリースするという計画も含まれていたからです。

 のちに,iOS 向けの開発優先度を上げ,UWP はかなり低い位置付けになっています。ただ,UWP はある程度の開発ノウハウ (IkaConnect という Splatoon 向けのアプリ開発経験があります) があるので,実際に UWP 版は開発を始めればすんなり行くでしょう。

 現在は,この範疇を広げ,将来的に Android, macOS 版のリリースも予定しています。macOS ももちろん Xamarin で開発できます。iOS 開発の延長線上で戦うことになるので,割とこちらもスムースに開発が行くのではないか? と予定しています。

2. 開発は難航した。

2.1 iOS

 Xamarin の開発環境はとても脆く,ビルド環境が壊れやすいという印象でした。iOS の UI では storyboard や xib という UI を定義する仕組みがあるんですが,実際には UI とプログラムを接続する必要があるわけですね。そのための仕組みを C# 向けに自動生成してくれる機能があるんですが,これが割と曲者でした。

 Visual Studio (Windows) 側でやると,UI デザイナーの立ち上がりが macOS に SSH 経由でアクセスしてるためとても遅く,Visual Studio for Mac から Xcode を経由して立ち上げると,csproj が書き変わるのか,もう Windows 側の整合性が取れなくなったりとか…… もう序盤はバチばちに壊れてましたね。

 結論としては,Windows 側で基本開発。UI コンポーネントの Outlet 接続は xml と C# source に手書きで追加 or Visual Studio (Windows) で変数定義のみ追加。基本的に UI の作成は Xcode にて行なっております。

 ある程度開発のフローがわかって思ったことは,Obj-C や Swift で書かれたミドルウェアを再利用するのがとても面倒臭いことで,結論を言えば,Obj-C で書いたほうがいいね…… って思います。これはマジ。Obj-C や Swift で書かれたものを C# で利用するには,Xcode でビルドして,それをさらに C# でビルドするという手順が必要なので。

2.2 Android

 こちらも難航しました。とにかく,Android Studio なら当たり前にできることが軒並み Visual Studio ではできない。結果,Android Studio で UI デザインを行なっています。Android では新しく ConstraintLayout という,iOS でいう AutoLayout に当たるレイアウトが追加されているのですが,Android Studio だと Xcode よりも楽に制約を定義できるという,本当に Android Studio 便利だなーって感心しながら作成していました。

 そして,Xamarin.Android 特有のクラッシュ問題の解決をやっと昨日解決したばかりです。現在は Android 4.0.3 - 4.4 向け (Dalvik 環境) で起動に失敗する問題の調査中です……

mntone.hateblo.jp

 Android 5.0 以上ではほぼ確定でリリースできると思ってもらっていいです。実は 5 割はできていて,まだ足りない 5 割の埋め合わせをしっかりする,ってのと,4.0.3 - 4.4 向けのクラッシュバグの原因特定を行うという形で,おおよそ 3 週間程度見てればいいのかな,と思います。

3. Android 版リリースができてから……

 UWP や macOS 版の開発もしたい気持ちはあるのです (実はそのあと watchOS や WearOS 向けの開発もしたいです;;)。しかし,まだ iOS や Android で機能実装が足りないと考えています。具体的に実装が 100% 決まっているものがあります。

  • キルタイムライン (いつ,どこで,誰を,倒した)
  • 1試合におけるブキごとの命中部位 (全ブキ表示は実装済みです)

 上記 2 つは UI も具体的に設計しており,Android 版がとりあえずリリースできてから作業に取り掛かりたいと考えています。まだ実装したい機能は山ほどあるんですが,それは実装する保証がないので非公開ということで。

 iOS 向けのバックグラウンド戦績ダウンロード機能は,技術的に結構難しく,また既存のコードを書き換える必要があるため,バグが混入したくないため,かなり延期させてもらう機能になってます。こちらもそのうち実装したいですね。

4. 宣伝

 iOS 版 Chicken Assist は無料で AppStore からダウンロードできます!

 アプリ内課金によりリージョン指定を増やすことが可能です(このような設計にしたのは裏事情があるので勘弁してください……)

‎「チキンアシスト」をApp Storeで

5. iOS 版の既知の不具合?

 実機がないため確認できていませんが,3D Touch 時にもしかするとクラッシュするかもしれません。MacBook Pro の Force Touch で一応動作自体は確認しているのですが,このクラッシュ原因は結構直すのが面倒臭いのと,そして,実機でも起こるのかわからないので,対策を見送らせていただいている点です。

 当方 4 inch 大好きマン(手が小さいので仕方ないです)ですから,iPhone SE を利用しています。

6. 開発関連

6.1 Android 版について

 Android は全てエミュレーターでの動作確認になる(残念ながら新しい実機を持ち合わせていません。当方 Android 2.3 時代に買った Xperia arc しか持ち合わせていません)ため,実機を購入したいところです。Chicken Assist の開発がスムースに進むように支援したい方がいれば助かります。あくまで趣味で開発しているものなので,あまり開発スピードは早くありませんがご了承ください。

6.2 Chicken Assist を開発して見たい方

 報酬などはありませんが,もし開発に参加して見たい方がいれば連絡ください。C# latest (現在 7.3) がかけることが前提条件です。Reactive や MVVM などの技術を知っている方,あるいは興味ある方でよろしくお願いします。