iOS

Xcode10 にしたら Multiple commands produce ... Info.plist で消耗した

個人プロジェクトを Xcode10 対応してたらこんなエラーが出た。 :-1: Multiple commands produce '/Users/hoge/Library/Developer/Xcode/DerivedData/KotaichiDex-eiyecmvfctikcwcspitwpzskudue/Build/Products/Debug-iphonesimulator/PokemonRealm/PokemonR…

Tesseract-OCR-iOS を使う

【Swift】文字認識ライブラリ、TesseractOCR for iOSを試してみた - Qiita に使い方があるが、少し古かったので Xcode9.4, Swift4 で動かすための手順。 Podfile pod 'TesseractOCRiOS', '4.0.0' そして pod install、終わったら xcworkspace を開く。 Build…

Xcode 9.3 にしたら IDEWorkspaceChecks.plist というファイルが作られたが何者なのか

Xcode 9.3 でプロジェクトを開いただけで Hoge.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist というファイルが作られた。 Release Note を見ると以下のように書いてある。 Xcode 9.3 adds a new IDEWorkspaceChecks.plist file to a workspace's shar…

Firebase HTTPS Callable Functions を type-safe に叩けるライブラリ

Firebase HTTPS callable function を試してみる に使い方は書いたが、素のまま SDK を使うのは厳しいので APIKit っぽく Endpoint を定義できていい感じに Function を叩けるようなライブラリを作った。 github.com endpoint の path と Decodable な Respo…

続・イケてない JSON を Swift の Decodable で扱いやすいモデルにデコードする

イケてない JSON を Swift の Decodable で扱いやすいモデルにデコードする の続き。 今度も last.fm の user.getRecentTracks を Decode していく。 尚、文字を打つのが面倒になったためこの記事はあらゆる説明を省略している。 JSON これを decode してい…

イケてない JSON を Swift の Decodable で扱いやすいモデルにデコードする

last.fm というサービスがあって、API も公開されているのでそれを Swift で使っているのだが、JSON の構造がイケてなくて苦労している。 こんな感じの JSON があったとする。 { "user": { "name": "RJ", "age": "20", "image": [ { "#text": "https://lastf…

プロモコードを利用したテストに参加する(テスター向け)

プロモコードでのテスト iOS アプリには「プロモーションコード」を利用することでリリース直前のアプリをテストすることができます。 やり方は簡単で、 App Store からプロモーションコードを入力してアプリを DL するだけです。 プロモコード版を入れたと…

iOS10 以下のサポートを切ったら ERROR ITMS-90502 が出た

iOS9, iOS10, iOS11 をサポートしていたのを、iOS11 のみサポートするように変えた。 そして申請しようとしたらエラーがでた。 ERROR ITMS-90502: "Invalid Bundle. Apps that only contain the arm64 slice must also have 'arm64' in the list of UIRequir…

ssh 経由で fastlane match できるようにする

$ ssh my@mac.com $ bundle exec fastlane match ... [12:19:58]: Enter the passphrase that should be used to encrypt/decrypt your certificates [12:19:58]: This passphrase is specific per repository and will be stored in your local keychain [1…

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

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 ア…