リリースビルドだけ no such module 'XXX' でてこまったけど Framework Search Paths だった

リリースビルドの時だけ何故か no such module 'XXXXX' って出てこまってたけど、 Framework Search Paths が Release の時だけからになってた。 この Project では CocoaPods を使っている。 Release に $(inherited) を設定したらビルド通った。 リリース…

Apple の審査が早すぎて1日に3回iOSアプリをアップデートリリースできて感動した

タイトル以上の情報はないんだけど1日3回もリリースできて感動しました。特急審査より早いレベル。 v1.1.1 を 11/18 09:42 に審査提出 11/18 23:28 に審査完了 -> 11/19 04:43 にリリース v1.2.0 を 2022/11/19 05:09 に審査提出 11/19 05:47 に審査完了 -> …

App Store Connect のプロモーションコードをカメラで入力できるWebアプリを作りました

starhoshi.github.io romoco というプロモーションコードをカメラで入力できるWebアプリを作りました。 プロモーションコードを入力するとギフトカードのようにApp Storeアプリのカメラで読み取れる画像が表示されます。 App Store Connect のプロモーション…

32歳、新しい技術を習得する余裕がなく昔取った杵柄でいつまで食えるか不安です

子供が産まれて一年半近く経つが、時間が全然取れない。 ここ最近は新しい技術を何か積極的に勉強するということが特になく、20代の頃に得た知識でなんとか飯を食っている感覚がある。転職してから1年は業務でFlutterを始めていて、それだけ聞くと新しい技術…

GAS で Google Calendar を使わず祝日 API を利用し祝日判定する

GAS

GASで祝日判定するとき、ググると Google Calendar の祝日カレンダーを使うなどが出てくるが、それを試したところ Exception: The Google Calendar is not enabled for the user. が出てしまい、権限をどうこうするのがだるかったので祝日APIからデータを取…

1000円カットがめっちゃ良かった

正確には1000円カットではなく1200円カット(QBハウス)です。 いつも髪は美容院で切ってもらってたけど、高いので1000円カットに行ってみたがめちゃ良かった。 美容院だと高いしカットだけで長いと1時間くらいかかっていらん話されて仕上がりはイマイチな時も…

個人端末に業務Slackを入れない

みなさんは個人のスマホに会社のSlackやチャットツールを入れていますか? 私もかつてはそのような時期があったが、ここ3~4年は個人端末に業務Slackを入れないようにしている。 これだけで精神衛生上とても良く、仕事とプライベートのメリハリがつく。 一方で…

OpenSim が便利

iOS

iOS アプリ開発をしている時、Simulator の中身のデータを参照したいことが稀によく発生する。 でも Simulator への Path は毎回忘れてググることになるし、ディレクトリも謎の文字列になっていて簡単には辿り着けない。 そういう時に OpenSim というアプリ…

個人開発のアプリを CocoaPods から Swift PM に移行した

個人開発のアプリを CocoaPods から Swift Package Manager に移行した。 やることはシンプルで $ pod deintegrate して、Xcode の Package Dependencies に Podfile にあるライブラリを追加していくだけでよい。 なのだが、同時にM1Macへの移行やiOS15対応…

作り込む前に、何よりもまずリリースするのが良いのではないか

ソフトウェア開発において、なんらかの機能を提供する状態としてざっくり以下の状態があると思う。 機能をリリースしていないのでユーザがその機能を利用できない 洗練されてなくユーザがうまく使えない 洗練されてはないがユーザが迷いなく利用できる 洗練…

Firebase Remote Config で FormatException: Invalid envelope のエラーが出る

Firebase Remote Config を Android で利用しようとしたら以下のようなエラーが出た。 I/flutter ( 6164): ----------------FIREBASE CRASHLYTICS---------------- I/flutter ( 6164): FormatException: Invalid envelope I/flutter ( 6164): #0 StandardMet…

Flutter 2.8.4 -> 3.0.0 にアップグレードする

fvm を利用したプロジェクトをアップグレードする。 $ fvm releases -------------------------------------- May 11 22 │ 3.0.0 stable -------------------------------------- $ fvm install 3.0.0 $ fvm use 3.0.0 $ fvm flutter --version Flutter 3.0.…

楽天モバイル0円プラン廃止は俺にとって改善

www.itmedia.co.jp 楽天モバイルの0円プランが終了し最低1078円になる。 今までは楽天モバイル0円を電話として利用し、デュアルSIMでIIJmio eSIM 2GBの440円、合計で440円で音声通話+データ通信を持つことができたがそれができなくなった。 しかし楽天経済圏…

Flutter でアプリの画面を Portrait 固定にする

Flutter で画面回転を無効にし縦固定にしたい、としてググると SystemChrome.setPreferredOrientations を設定しろと出てきたりする。 しかし、これだと splash screen は横で表示されてしまうので良くない。AndroidManifest.xml や Info.plist で設定する方…

Dart でテンプレートからファイル生成を行う

$ dart ./scripts/page_generator.dart sign_in みたいにしたら sign_in_page.dart, sign_in_view_mode.dart, sign_in_view_state.dart みたいに必要なファイル群をガッっと生成してくれるやつを作る。iOS でいう Generamba とかそういう系のやつ。 既存のコ…

GCP のコンソールでFirebaseが自動生成したキーを誤って削除してしまった際の対処法

GCP の管理画面見てたら iOS key (auto created by Firebase) というのが生えてて、なんだこれいらんやろと思って消したら Firebase Remote Config でエラーが出てしまった。 GCP管理画面にあるFirebaseのKey Firebase Remote Config のエラー [VERBOSE-2:ui…

auto_route で WillPopScope の onWillPop で false を返している時は popForced を使って閉じる

pub.dev 画面遷移の際に type safe にできるので auto_route を使っているが、WillPopScope で囲んだ AlertDialog を閉じれずにハマった。 Android の戻るボタンでダイアログが閉じれないように WillPopScope で囲んだダイアログを作る。Android back ボタン…

ITMS-90165 が起きてアプリの提出ができなくなったが証明書再作成で解決した

朝からこんなエラーが起きてて、特に設定変えたりした覚えもないけどなんだろうなあと思ったけど証明書再作成で直った。 Error uploading ipa file: [Transporter Error Output]: ERROR ITMS-90165: Invalid Provisioning Profile Signature. The provisioni…

AppBar actions アイコンに背景色を設定したい

Icons.account_circle の人間の部分の色だけ変えたい。が、それをやるのは結構ややこしい。普通にアイコンを設置すると人間部分は透過となっている。 After のように人間部分に色を設定する。 Before After 最初のコード 普通に actions に IconButton を入…

iOSアプリ開発時のシミュレータはiPadを使うと便利

iOSアプリ(もしくはFlutterアプリ)を開発するとき、iOS Simulator は iPhone を使うより iPad を使うと色々な画面サイズが簡単に確認できて便利。なお、iPadアプリに対応していることが前提。(この開発方法は前職の同僚がやっていた) iPhone だと固定サイズ…

Admob の本番広告はアプリリリース後審査が完了するまで表示されない

support.google.com admob 審査・承認プロセス追加そんな変わった感無いが・審査期間は広告配信無し・通常は24~48時間で審査完了・承認されれば広告出る・不承認ならポリシーセンターの内容解決して再審査出してね・リリース前のテストはテストモード、テス…

Flutter で build メソッドをリファクタするとき Widget は class に分割するべし

www.youtube.com この Youtube で述べられている内容だが、Flutter で build メソッドがでかくなってきて component に分割するか〜と思う時がある。 その時、 Helper Methods と呼ばれる方法と、 class で Widget を作る方法があるがパフォーマンスの観点か…

Dart でデフォルト引数を使う

Dart でデフォルト引数を使いたくて、こんな感じで書いてみると The default value of an optional parameter must be constant. というエラーが出てしまう。 class HogeClass { // The default value of an optional parameter must be constant. HogeClass…

Flutter でのタブレット対応を考える Readable Content Guide

iOS には Readable Content Guide という考え方があり、iPad などの大きな端末では横幅いっぱいにコンテンツが表示されないようになっている。 参考: iOSでの読みやすい幅 - クックパッド開発者ブログ Flutter で iPad を意識せず実装するとボタンが横に間伸…

ファイルの変更を検知して自動でテストを実行する

Flutter のテスト実行には watch がなくて不便だと思っていたのでファイルの変更を検知して自動でテストを実行する。 watchman を使うので別に Flutter に限った話ではない。 watchman いれる https://facebook.github.io/watchman/ install 方法は色々ある…

Xcode11 で Resource の Localization をする

Xcode11 から Resource の Localization ができるようになった。 https://help.apple.com/xcode/mac/11.0/index.html?localePath=en.lproj#/dev7c584bb2a やり方は簡単で、まずベースとなる言語のファイルを追加、Localization の設定、Localize 用のファイ…

Share Extension で画像のシェア先に自分のアプリを出す

これの Share 先に自分のアプリを表示させて、保存などの処理を行う。 やることは Target 追加 App Groups の設定 証明書の修正 Podfile 修正 新しいTargetの Info.plist 修正 ShareViewController の実装 データの保存先について Simulator で確認 です。 T…

fastlane で Crashlytics に dSYM をアップロードしようとしたら invalid byte sequence in UTF-8 でハマった

lane :upload_latest_dsyms do download_dsyms(version: "latest") upload_symbols_to_crashlytics clean_build_artifacts end を実行したら、こんなエラーが出た [22:29:22]: ------------------------------------------- [22:29:22]: --- Step: upload_sy…

macOS Catalina で Karabiner を使う

これをやるだけ。 Catalina が出たばかりなので暫定処置となる。 github.com 日本語にすると、 セキュリティとプライバシーの入力監視に /Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_grabber を追加。 Terminal で sudo killal…

皆さまにご報告。

いつも応援していただいている皆さまへ、私事で恐縮ですがご報告があります。 本日令和元年五月一日に私星川健介は入籍致しましたことをここにご報告させていただきます。 お相手は一般の方です。 元号が令和に変わった初日で、大安という事もあり、この良き…