【今日の研鑽】iPhoneでの動作確認の日(2019-10-24)

2020年4月20日

6時に起きたと思ったら7時になってた。寒い季節はほんと意識が飛びやすい。就寝時間はよかったけど、寝ながらもんもんと考え事をしてしまったのが良くなかった。寝付きが悪かった。

7時過ぎに起床!

WBS(2019-10-23)

今日の気になったニュースは新通貨発行ですね。どうなるのやら

モーターショー

モーターショーはご時世的な意味合いもあってか、どんどん縮小傾向にあるみたいですね。入場者数は、1991年のピークを堺に右肩さがりになってますね。EV車や自動運転技術などいろいろとアピールすることを変えて頑張ってるみたいですね。

来年のオリンピック選手村で運用される予定のある、電気自動車で自動運転をするeパレットが面白そうでした。装いを変えることで、移動販売車にもなったりできるみたいでなかなか未来感の高い乗り物ですね。

Facebookの新通貨リブラ発行について

Facebookが新しい通貨であるリブラを発行しようとしているところ、各方面から厳しい意見が上がってきているそうです。フェイスブック側も、懸念がある場合は発行時期を見送る姿勢があるらしく、急進させるつもりはないみたいです。

思惑としては、金融サービスを使えない人にもサービスを提供できるということや、こういったことをアメリカが行わないと、中国に取られてしまうという焦りがあるようです。

アメリカでは銀行口座を持ってない人が1400万人ほどいるそうです。アメリカ人口を3.3億人とすると、、、0.4%ぐらいの人たちか。1400万人も!?と思ったけど割合的にはそんなもんかなぁと思ってしまいました。リブラを必要としている人が1400万人というわけではなさそうに感じました。

懸念事項としてはデジタル通貨を使っての資金洗浄に使われたり、マネーロンダリングに使われないかなど、様々なものがあるみたいです。

ただ、フェイスブックが参入するとなると、GAFAが黙ってないような気がしますね。自分もどこかに利益がうまれないかちょっと見守って行きたいと思いました。

ひとりしゃぶしゃぶ

最近は1人で入れるお店が増えてますね。1人焼き肉は聞いたことがありますが、最近ではひとりしゃぶしゃぶなるものも現れたみたいです。ここまで来ると何でもあり感がすごい。映像の中だと、どのタイミングなのかはわかりませんでしたが、スープがめっちゃ少なくて食べづらそうだなと思ってしまいました。

お肉は回転寿司のように、レーンの上をお肉が回っており、欲しい物をとって食べるタイプだそうです。なぜそうした?お一人焼き肉は回ってなかったと思うんだけど。薄いお肉なので痛みやすいのですが、容器にドライアイスを仕込んでいるためお肉の鮮度を保ちやすくしているそうです。そのうち直接頼むほうが主流になりそうですけど、キャッチーな要素としては必要だったんですかね。

明るいニュースが少ない中でちょっとした癒やしポイントになってました。

ビルドマシンの準備

久しぶりにオンボロMacBookProを動かすことに。スイッチプラットフォームにめちゃ時間がかかるので、早めに一回プロジェクトを認識させておきたいところ

久しぶりに起こしたら、めっちゃ重い

電源をつないで起動したら、マウスカーソルがカクつきまくってまともに動作しなかった。アクティビティモニタをみても、見慣れないのが動きまくってたので、とりあえず再起動!

Jenkins起動させて、ブラウザ経由でアクセスできることを確認出来ました。早いところMacMini購入して、もう少しマシな状態にしたいと思ってますが、なかなか時期が来ない。

GitHubからプロジェクトを落として、UnityでiOSにスイッチプラットフォームするのにめちゃ時間がかかるかと覚悟してましたが、結構すぐ終わりました。スイッチプラットフォームも4分ちょいぐらいで30分ぐらいかなーとか構えてたのにあっさり終わってなんか拍子抜け。

今日は簡単に乗り越えられそうな予感!?

AppleDeveloperでアプリを追加

今回用に新規にアプリ追加が必要なので、AppIdを追加する儀式と、それに伴う下準備。久しぶりにDeveloperページ見たけど、ほんとUI変わりすぎじゃないですかね・・・。

よくわかんなくなってたので、やったことをまとめ直して見ました

これが通用しなくなる日も、そのうちくるんだろうなぁ

いざビルド!

ということで、久しぶりにJenkinsでビルドしてみます。かれこれ2ヶ月以上ぶりでした。挑戦2回でデプロイゲートに上げるまで成功。1回目はXcodeの部分で止まってました。どうやら自分でProvisioningProfileの更新が出来なかったのか、んなもんねーよ!みたいなログが出てました。

手動で更新を行って、再度Jenkins経由でビルドしたらで、気づいたらデプロイゲートに上がってました。いやー助かる。だいたい15分ぐらい見てれば問題なさそうですね。

iPhone側でもちゃんとインストールして動作しました。まぁシーンの登録忘れてて、真っ黒画面で止まってましたけど・・・

そういえばアイコンも作らないとだなぁ。工数に入れてないけど、予約トップ10とかの準備と同時にやってしまおう。

実機動作はかなり警戒してましたが、思った以上にスムーズで一安心。

申請までできるかItunesConnectへアップロード

リリース用のパイプラインを作って、アップロードまで試してみましたが、ipaファイルを作るところで1回コケてしまいました。

error: exportArchive: No profiles for 'hackslashgirls.bundleID’ were found Error Domain=IDEProfileLocatorErrorDomain Code=1 “No profiles for 'hackslashgirls.bundleID’ were found" UserInfo={NSLocalizedDescription=No profiles for 'hackslashgirls.bundleID’ were found, NSLocalizedRecoverySuggestion=Xcode couldn’t find any iOS App Store provisioning profiles matching 'hackslashgirls.bundleID’. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild.}

このあたりほんと1回コケるの儀式的な何かなんですかね?一度手動でアーカイブしてやると以降は大丈夫っぽかったです。一応Provisioningプロファイルとか再更新はしておきました。

更に警告がやってきた

手動でアップロードをしたら、すんなり行ってくれたのでとりあえず1つ上げておくかと思ったらこんな警告がやってきました

We identified one or more issues with a recent delivery for your app, “ハクスラ少女" 1.0 (0). Your delivery was successful, but you may wish to correct the following issues in your next delivery:
ITMS-90704: Missing App Store Icon – iOS Apps must include a 1024x1024px App Store Icon in PNG format. Without providing the icon in the Asset Catalog or via App Store Connect, apps cannot be submitted for App Review or Beta App Review. Refer to https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/ for more information.
ITMS-90339: Deprecated Info.plist Key – The Info.plist contains a key 'UIApplicationExitsOnSuspend’ in bundle hackslashgirls [hackslashgirls.app] that will soon be unsupported. Remove the key, rebuild your app and resubmit.
ITMS-90683: Missing Purpose String in Info.plist – Your app’s code references one or more APIs that access sensitive user data. The app’s Info.plist file should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn’t contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
ITMS-90809: Deprecated API Usage – Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

アイコンはまぁセットしてなかったので良いんですが、2つ目の Deprecated Info.plist Key に関しては今後使えなくなるきのうが入ってるけどええの?という内容で、Unity2019では除外されるようになってるらしいんですが、自分のUnityバージョンでは入ってしまってるのでこちらを参考にカットするスクリプトを仕込むように対応します。

エディター用の拡張で、ビルド後に呼び出されるようにしておくことで、plistから使わないように仕込むことができるらしいです。

	// ビルド後処理
	[PostProcessBuild(1)]
	public void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
	{
#if UNITY_IOS
		// Get plist
		string plistPath = pathToBuiltProject + "/Info.plist";
		PlistDocument plist = new PlistDocument();
		plist.ReadFromString(File.ReadAllText(plistPath));
		// Get root
		PlistElementDict rootDict = plist.root;
		// Set encryption usage boolean
		string encryptKey = "ITSAppUsesNonExemptEncryption";
		rootDict.SetBoolean(encryptKey, false);
		// remove exit on suspend if it exists.
		string exitsOnSuspendKey = "UIApplicationExitsOnSuspend";
		if (rootDict.values.ContainsKey(exitsOnSuspendKey))
		{
			rootDict.values.Remove(exitsOnSuspendKey);
		}
		// Write to file
		File.WriteAllText(plistPath, plist.WriteToString());
#endif
	}

まぁ警告なので無視しても大丈夫です。自分はUpload後にわざわざポップアップで警告されたのでてっきりダメだったのかと思って対応してる最中にバイナリーが上がったよーってお知らせが飛んできて、見送ろうかと思いましたが、警告多いと目をつけられることもある?という意見がいくつかあったので一応対応することに。治るかどうかは次回リリース用ビルドで分かります。あとは、目的記載しておいて系のやつが入ってなかったのでそれらの追記をエディターで対応しときました。(確か未記入だと使うタイミングでアプリ落ちるとかでしたっけ?)

ビルド番号の自動更新

誤射で1回ビルドしたときに気づいたのが、iOSのbuildNumberが変わってないためValidationでコケてました(逆に言うとバリデーションまではいけてたのか)。あとJenkinsからバッチモードでビルドするときに引数を渡しているので、それを使ってビルドごとにbuildNumberが変わるようにしておけば二度と出会わないでしょう。

		string[] args = System.Environment.GetCommandLineArgs();
		int i, len = args.Length;
		for (i = 0; i < len; ++i)
		{
			switch (args[i])
			{
				case "build_number":
					PlayerSettings.iOS.buildNumber = args[i + 1];
					break;
			}
		}

OnPreprocessBuildの処理に仕込めば、ビルド前に番号の更新などを行えるのでおすすめ。

今日の成果

今のところは、自動化でValidationするところまでは持って行けているので、明日あたりにもう1回ぐらいリリース用ビルドしてみて、手動いらずでアップロードしてるところを確認しようかと思います。

ハクスラ少女作業

ビルド関係とは別に他の作業も継続してやっているので、まだまだ気が抜けない。作業する前に、githubにissueだけ作ってから作業着手。

issue作成

きのう改めた内容をissue化しました。なんか怪しいのも増えてますが、とりあえず今日のタスクにしてる分は対応しておきたいです。

今日予定している作業は以下です。

  • 初期データ作成
  • 放置要素実装
  • アイコン当て込み

倍速モードはどんな感じで実装するか調査できればやっておきたいです。

初期データ作成処理

今回は必要なデータが少ないので初回起動時と思われるところで一気に作ってしまおう。

  • 現在のフロア
  • 最高フロア
  • リスタートフロア
  • Coin
  • Gem
  • BGMボリューム
  • SEボリューム
  • 消費アイテム一覧

data系が少なくてほんと助かりますわ。

アイコン当て込み

やっぱアイコンは全部画像当てたいなぁと思いましたまる。こうなると武器系のアイコンが適当になってるのがかなり浮いてしまいますね。

放置処理実装

意味はあまりないかもだけど、時間だけはPlayerPrefsを使うことにします。

OnApplicationPauseを使って出入りの処理を入れてみましたが、これでいいのかはちょっとわからないですね。とりあえず試してみますかな。

倍速処理

倍速処理は実装初期は無理かな?とか思ってたんですが、Time.timeScaleを変化させるだけで対応できそうでした。20倍で試してみましたが、ちゃんと動いてて、ちょっと感動しました。

これは明日で十分実装できそうです。

空腹処理

空き時間があったので、先回りで作業しとこうと思い、空腹関係の処理を着手。食べた直後はお腹が減りにくいとか、いろいろ拡張したいけど、初期実装ということでひねりは少なめ。

若干雑な感じが残っていますが、一応空腹処理も実装出来ました。