iOS

プログラミングでポケモンのダメージ計算をしてみよう

adventar.org Pokémon RNG Advent Calendar 2017 7日目です。 昨日は ポケモンの実数値や努力値をプログラミングで計算 するという内容を書きました。 今日はダメージ計算をしてみようと思います。 この記事はプログラミングがわからない人には難しい内容で…

ポケモンの実数値や努力値をプログラミングで計算してみよう

adventar.org Pokémon RNG Advent Calendar 2017 6日目です! 乱数の話ではありませんが、ポケモンの実数値, 努力値をプログラミングで計算する話をします。 この記事は、 プログラムに興味あるポケモン好きな人 ダメージ計算などで実数値の調整をしてるけど…

iOS Test Night #6 1周年 まとめ #ios_test_night

testnight.connpass.com iOS Test Night #6 にブログ枠として参加したので、そのレポートです。 ㊗️ 1周年 開始前の挨拶として、Qiita に投稿された iOS のテスト関連の記事がこの一年で増えたのか? という話から始まりました。 結果として、増えはしたけど…

iTunes Connect に Upload 後の bitcode 再コンパイルでエラーが出た

iTunes Connect にバイナリのアップロードは完了したんだけど、 iTunes Connect: Processing stopped for HogeApp みたいなメールが来た。 何か問題があって bitcode の再コンパイルが止まってしまったようだ。 メール全文: iTunes Connect: Processing stop…

iTunes Connect に Upload しようとしたら Info.plist 関連で怒られた

Unable to process application at this time due to the following error: This bundle is invalid. The Info.plist file is missing or could not be parsed. Please check it for embedded control characters.. iTunes Connect にバイナリアップロードし…

Xcode の Other Swift Flag で -D STAGING を指定したのに #if STAGING が有効にならなかった

Xcode で環境別にコンパイルするために Staging の Configuration を作ったんだけど、 -D STAGING を指定しても #if STAGING が false になっていた。 なんでかな〜 って設定眺めていたら、 Active Compilation Conditions が Debug になっていたのが原因だ…

MusicPlayer で音楽を再生しようとしたら __abort_with_payload というエラーが出た

import MediaPlayer ... override func viewDidLoad() { super.viewDidLoad() let player = MPMusicPlayerController.systemMusicPlayer player.setQueue(with: MPMediaQuery.songs()) player.play() } これで音楽が再生できたんだけど、再生開始した瞬間に…

TestFlight でリリースごとにアプリを配布していたらそれに助けられた

TestFlight という、アプリのベータ版などを配布する Apple 純正のサービスがある。 TestFlight - Apple Developer これのいいところは「リリースするアプリと同じアプリをテストできる」というところ。 実際にユーザが使うアプリと同じもので動作確認ができ…

Apple 特急審査 2017

ここ最近は Apple の審査が早いけど、致命的なバグなどを出してしまったら急いでレビューして欲しい、そういう時のために apple expedited review というのが用意されている。 これを使うと優先的にアプリをレビューしてくれる。 しかしこれには注意が必要で…

iTunes Connect の段階的リリースを試してみた

段階的リリースとは WWDC2017 で発表された機能。 1%, 2%, 5% ... 100% と限られた人から段階的に自動アップデートされていく。 新機能のテストや、バグが起きてないかなどの確認で使えそう。 Apple 公式ヘルプ 自動アップデート用の段階的リリース(iOS、wa…

UIView の Swipe イベントは実行して Tap は後ろの View に流したいけど出来なさそう

とある View の上に透明な UIView を載せて、 Swipe だったら透明な View でイベントをハンドリングして Tap だったら後ろの View にスルーしようとしたけど出来なさそうだった。 どういうことか こういう View があって、右にスワイプしたら数値を200にして…

Realm でローカルのデータベースに大量のデータを追加したい

10万件くらいのデータを Realm に持ってそのデータを使って図鑑とかが見れる iOS アプリを作っている。固定データをわざわざ API から取得するのは無駄なので、最初からアプリ内にデータを保持する設計になっている。 そのアプリに2万件くらいのデータを追加…

fastlane deliver を使ってコマンド1発で Waiting For Review までもっていく

$ bundle exec fastlane release このコマンドを叩くだけでリリースビルド、iTunesConnect へバイナリ提出、IDFA 情報など入力して審査待ちの状態まで持っていけるようにした。 Deliverfile こんな感じに書いてる。 app_identifier "com.myapp" username "ap…

個人アプリを Xcode9 Swift4 対応した時にやったこと

個人アプリ2つを Xcode9 GM で動くようにした。 これは私のアプリの場合なので、違うプロジェクトでは不要なことや、他にもっとやらないといけないことがあると思う。 やったこと 1. Xcode9 DL Xcode - Apple Developer から DL してインストール。 Xcode8も…

UITabBar の背景をすりガラスのまま Dark にする

普通の UITabBar は明るいすりガラスだけど、これを UIBlurEffect(style: .dark) と同じように暗くしたい。 Light Dark override func viewDidLoad() { super.viewDidLoad() tabBar.backgroundImage = UIImage() let dummy = UIToolbar(frame: tabBar.bounds…

fastlane pem で Push 通知に必要な p12 ファイルを生成する

iOS 用の Push 通知 証明書を生成したい。 真心を込めて手動で生成することもできるが、ここでは fastlane pem でコマンドで生成する。 fastlane pem fastlane/pem at master · fastlane/fastlane 詳細は上の README みればやり方書いてる。 gem install fas…

xcconfig を使い本体アプリと Embedded Framework を同じ環境設定でビルドする

本体アプリを Build した時に、本体アプリの CONFIGURATION を Embedded Framework 側に渡したい。 本体アプリを Debug Build Embedded Framework も Debug Build 本体アプリを Release Build Embedded Framework も Release Build というように、本体アプリ…

TodayViewController の viewDidLoad が呼ばれるタイミングについて

iOS の TodayExtension を実装していて、 TodayViewController の viewDidLoad が走るタイミングが最初はわからず苦労した。 viewDidLoad が呼ばれるタイミング 画面に表示されたタイミングで ほぼ毎回 viewDidLoad が呼ばれる。 TodayExtension を 10 こく…

EdTech Engineer Meetup #1 で「学校の iOS 端末事情」について話した #edtech_ja

Education×Technolog 業界の3社 Classi, LITALICO, Studyplus が集まって会社紹介やらパネルディスカッションやら LT やら懇親会しましょう、という会で LT してきた。 edtechem.connpass.com Lightning Talks 教育業界、というか BtoB 業界のモバイルアプリ…

Firebase, Google Analytics, Fabric, Apple App Analytics の個人的使い分け

昨今モバイル界隈ではアクセス解析に色々なサービスがあるが、それぞれにメリット/デメリットがあるため、複数併用するようにしている。4 つのサービスの個人的使い分けについて、iOS エンジニア視点で雑に書いていく。 なお、どれも無料枠での利用とする。 …

モバイルアプリの情報管理・Slack 連携ができる AppFollow

AppFollow アプリのレビュー、ランキング、説明文など色々な情報を総合的に見ることができて、それらの情報を Slack などに連携できる。iTunes Connect のアカウント情報などは渡す必要がなくて、AppStore などで見れるデータをそのまま保存している。 2 ア…

Swift2 から Swift3 への移行がだるすぎて諦めた

1年前くらいにリリースしたアプリ があるのだが、動かなくなったというレビューがきたので修正しようと思ったのだがだるすぎる。 何がだるいかというと、 Swift3への対応が一番だるい。ライブラリを更新して、マイグレーションして… ってやらないといけない…

古い iOS アプリが Apple に削除された

www.itmedia.co.jp これの対象になったようで、4年くらい前にリリースしたけど全くアップデートしていなかったアプリが削除された。 削除されたアプリは Anison Tube というやつで、AppStore ではもう見れなくなっている。 作ったアプリがアプリストアに14個…

Xcode で A valid provisioning profile for this executable was not found. が出た時の対処法

実機インストールしようとしたらなんじゃこりゃ、というエラーが出た。ググってみると iPad 側にインストールされた証明書が悪い、などと出たのだが自分の場合はどれも違った。 Debug ビルドなのに Adhoc 証明書を使おうとしてた のが原因っぽい。 ダメな例 …

iOS Simulator で壁紙を設定する

iOS

実機 iPhone だと 設定 > 壁紙 から壁紙を変更できるが、シミュレータだと壁紙や Wallpaper の変更画面が表示されない。 しかし、写真アプリからなら壁紙設定画面にたどり着ける。 手順としては以下。 Photos(写真) アプリを開く 壁紙にしたい画像を選ぶ Act…

iTunes Connect の売り上げとトレンドにある「デスクトップ」は何者なのか

iOS 向けにしかアプリをリリースしていないのに、 デスクトップ というデバイスでのダウンロードがある。 デスクトップとは stackoverflow.com どうやら、 PC の iTunes からダウンロードした時はデスクトップとしてカウントされるらしい。どこ経由でダウン…

「モバイルアプリ開発エキスパート養成読本」を読んだ

モバイルアプリ開発エキスパート養成読本 (Software Design plus)作者: 山戸茂樹,坂田晃一,黒川洋,藤田琢磨,山田航,田坂和暢,熊谷知子,森本利博,坂本和大,小形昌樹,鈴木大貴,志甫侑紀出版社/メーカー: 技術評論社発売日: 2017/04/11メディア: 大型本この商品…

「軽量・高速モバイルデータベース Realm入門」を読んだ

軽量・高速モバイルデータベースRealm入門作者: 菅原祐,Realm 岸川克己出版社/メーカー: 技術評論社発売日: 2017/03/11メディア: 大型本この商品を含むブログを見る Realm は個人開発でそこそこ使っててそれなりに理解しているけど、雰囲気でしか理解してな…

RxSwift で NotificationCenter を使う

Notification を送る側 let name = Notification.Name("notification") NotificationCenter.default.post(name: name, object: nil, userInfo: ["key": "value"]) Notifiactin を受ける側 disposeBag があるので購読やめるとかしないでよい。 NotificationCe…

iOS Test Night #3 でカバレッジの計測について話してきた

カバレッジについて話したが、カバレッジが高けりゃいいわけじゃなくて、計算ロジックとかは絶対に書いた方がいいけどそうではないところは書くメリット小さいかなと思っている。 とはいえテストがないと影響範囲読めないし、「俺たちが書くコードは完璧だか…