chevron_left

メインカテゴリーを選択しなおす

cancel
notwork | モバイルアプリ開発情報 https://tech.naturalmindo.com/

モバイルアプリを中心とした開発のテックブログ(iOS/Android)その他Web、ゲームやMac、PC、スマートフォン、IoTやガジェットなどITに関するテクノロジーネタを挙げていきます。

naturalmind
フォロー
住所
未設定
出身
未設定
ブログ村参加

2021/03/02

arrow_drop_down
  • Flutterを学ぶのにおすすめの本5選

    Flutter開発者におすすめの書籍5選です。iOS/Androidモバイルアプリエンジニア向けにFlutter(Dart言語)を学習するのにおすすめの本を5つ紹介します。初心者だけでなく中級者にも十分で最新の環境構築方法や、Riverpodなどの状態管理についても触れられています。ハンズオン用にサンプルコードが充実してかゆいところへも手が届くよう本もあります。ウィジェットのグラフィックやアニメーション、ゲームやFirebaseを解説したもあります。 ・Flutter実践開発 ── iPhone/Android両対応アプリ開発のテクニック ・Flutter モバイルアプリ開発バイブル ・基礎から学ぶ Flutter ・マルチプラットフォーム対応 最新フレームワーク Flutter 3入門 ・Flutter×Firebaseで始めるモバイルアプリ開発・最新改訂版 ・Flutter×Firebaseで始めるモバイルアプリ開発 (技術書典シリーズ(NextPublishing)) クロスプラットフォーム(Xamarin、Unity、React Native)

  • 影なしでXcodeシミュレーターのスクリーンショットを撮る方法

    iOSのシミュレーターのスクリーンショットで影(シャドウ)が入ってしまう場合の解決方法です。 シミュレーターのスクリーンショット機能ではデバイスのベゼル(外側のフレーム)が画像に含まれません。 Macのスクリーンショット機能では、ツールバーと影が含まれてしまいます。プレビューアプリでツールバーは消せますが、影が残ります。 画面イメージを関係者と共有したい場合やリリース時のアプリストアのスクリーンショット用に使いたい場合があるかと思います。 その場合には、command + shift + 5のスクリーンショット撮影時にoptionキーを押しておくことで解決します。

  • LINEで「年齢認証」が出て友だち追加でID検索ができないときの対処法

    LINEアプリで「年齢認証」が出て友だち追加でID検索や電話番号検索できない、自分のIDによる友だち追加を許可できないときの対処法方法を紹介します。 iOS/Androidどちらでも使えます。 18歳以上であること前提で、ドコモやau、ソフトバンクなどキャリア側のマイページでの設定が必要です。設定したつもりでも年齢認証が完了せず、うんともすんともいわず何度年齢確認しようにも同じ操作の繰り返しになってしまうことがあります。特にエラーや次の指示が出ない場合があります。 docomoの例ではマイページ以降の設定で、LINEのサービスに年齢判定機能の通知設定を変更する必要があります。 なお、3大キャリアに限らず、楽天モバイル、LINEモバイル、Y!Mobile、UQモバイル、ahamoやLINEMOなども同様です。但しマイナーな格安SIMの通信事業者は設定できない可能性があるので注意が必要です。

  • 【ドラクエⅢ】世界の地名の由来・モデルとなった実際の国まとめ

    不朽の名作「ドラゴンクエストⅢ」の世界の地名が、現実の地球の世界のどこと対応しているのか照らし合わせながら、由来・モデルをまとめました。 ピラミッドやジパング、卑弥呼など現実世界との関連を連想するものも多く、オーストラリアがモデルになっていると勘違いされるアリアハン大陸について、超大陸パンゲアやローレシア大陸との関わりを由来とする独自の考察もあります。ドラクエ3の地名と実際の国・地域・モデルを一覧にした図表としてまとめました。

  • Github Copilotを導入して、コード補完による候補が出せなくなったときの解決方法

    Github Copilotを導入したことで、従来のIDE(AndroidStudio、VSCode)のコード補完が機能しなくなった場合の解決方法です。Copilotの候補と競合して、.(ドット)を打ったあとにメソッドやプロパティの候補が出せなくなってしまいました。 Macのシステムか、IDE(Android Studio / Visual Studio Code)のショートカットの再設定で解決させることができます。

  • 【Flutter】TabBarで左余白が出るようになってしまったときの解決方法

    FlutterのTabBarにて左側に余白(パディングかマージン)が入るようになった。右端は問題なく、左端のみにpadding(margin)が入る。 FlutterのSDKバージョンを上げたためと思われる。v3.16系に上げたことで、TabBarのtabAlignmentプロパティが追加されており、タブの配置をカスタマイズできるようになったためでした。

  • 【Flutter】ListViewなどにスクロールバーを表示させる方法

    ListViewやGridViewなどのリストをそのまま使っても、デフォルトではスクロールバーは表示されない。 スクロールバーがないと、スライドでコンテンツを移動した際に、全体のどのくらいの位置に移動したのかがわかりにくくなる。 スクロールバーを表示するためには、ScrollbarウィジェットでWrapするとよい。UITableViewやUICollectionViewで馴染みやすいGroupListViewやGroupGridViewのパッケージでも同様。

  • ドラクエウォークでモンスターのこころを選択するシーンなどのスクロールでサクサク移動したい

    ドラクエウォークのこころグレードアップやキャラクターのこころ変更などモンスターのこころを選択するシーンでスクロールをサクサク速く移動する方法があります。iOS/Android共通です。 こころの装備以外にも、モンスターずかん、なかまモンスターずかんなどの図鑑系、モンスターリスト、キャラクターの装備変更やルイーダの酒場の冒険者名簿や助けてくれた人一覧などのリスト表示でも有効です。また、宝の地図の地図リストでもつまみは見えませんが有効です。

  • iPhoneのスクロールで一気に移動する方法

    iPhoneやiPadにおいて、スクロールが長い場合に指でスライドを何度もするのがしんどいので、上下の移動を素早く簡単にしたい。ブラウザ(SafariやChrome)やSNSなどの各種アプリ(YouTube、LINE、X、Twitter、Instagram、TikTok、Amazonなど)でも同様に使える小技です。 スライドバーのつまみを長押ししてから移動させたり、ステータスバーのタップで自動的にトップに移動できたりします。

  • ツムツムのキャラクター選択のスクロールをサクサク移動したい

    ツムツムのツムツムコレクション画面のマイツムを選択する画面で、ページ移動のスクロールをサクサク速く移動する方法があります。iOS/Android共通です。iPadではできません。代替方法もいまのところありません。 指でスライドし続けるのは時間がかかり、じれったいので一気に移動させたい。 画面最下部の領域を左右にスライドしたりタップすると連動してページも移動します。簡単にスクロール移動量を増やしてサクサク操作することができます。

  • 【中級者】書籍「ITプロジェクトの英語」より「知っておくべき英語での言い回し10選」

    ITプロジェクトに関わるプロジェクトリーダー、プロジェクトマネージャー向けの理解しておくべき英語の言い回しが紹介されています。プロジェクトのプロセスに合わせて、ポイントや例文を多数紹介しており、より具体的で活きた英文を学ぶことができます。工数や人日・人月などの表現(MD、man-hour、man-days、person-monthなど)から、契約締結、共通化、引き継ぎ、遅延、暫定対応、検収、口頭伝達などよく使う表現にポイントを絞って例文を紹介しています。企画、設計、開発から、保守、管理、評価まで、ITプロジェクト全体をカバーしているため、PLやPMの方はもちろん候補となるエンジニアのメンバーも抑えておくとよいでしょう。

  • タイムツイストの数学の問題の解き方がわからない

    ファミコンのアドベンチャーゲームの「タイムツイスト 歴史のかたすみで…」に出てくる数学の問題の解き方を紹介します。 牛と羊と豚を1000ドルぴったりで50匹買ってこい。牛は1匹120ドル。羊は1匹30ドル。豚は1匹5ドル。 いったい何匹ずつ買えばよいかという問題です。 連立方程式や行列などだけでは簡単にかつきれいには解けないため、当たりを付ける必要があります。

  • 【Flutter】画面右上のDEBUG表示を消す方法

    Flutterによるアプリ開発で動作確認する場合、実機やXcodeのシミュレーター、Androidのエミュレーターで確認することになりますが、デバッグビルドした場合には、画面右上に「DEBUG」という帯が表示されてしまいます。 このDEBUG表示はコード1行で簡単に非表示にすることができます。 アプリリリース時にも表示されてしまうのではないかと不安になるでしょう。アプリを関係者に配布する場合にも、配布された人が同じように不安になる可能性があります。尚、リリースモードでビルドすればDEBUG表示はなくなります。アプリリリース時は、リリースモードでビルドすることになるので問題ありません。 また、アプリストアに掲載するためのスクリーンショットを撮る場合にもDEBUG表示は邪魔になります。 main.dartの大元のWidget(ここではデフォルトで生成されるMyApp)のbuild内、MaterialAppのパラメータとして、「debugShowCheckedModeBanner: false」を1行追加すれば、DEBUGモードでビルドしてもDEBUGを消すことができます。

  • 【初心者〜中級者】書籍「プログラミングの英単語」より「知っておくべき英単語」とは

    コードの気持ちがわかる!プログラミングの英単語 書籍「コードの気持ちがわかる!プログラミングの英単語」から分かるポイントをまとめます。 エンジニアが抑えておくべき英単語150 コードを読み書きするなか

  • MacでPDFの入手先情報を手早く消す方法

    Macにおいて、追加の専用アプリケーション(ソフトウェア)のインストールなしでPDFファイルの入手先プロパティ(メタデータ)を手早く簡単に消す方法。 セキュリティ上、作成したり他から入手したファイルを他の人に共有したり配布する際には、個人情報が含まれていないか注意する必要がある。 PDFのプロパティ情報を編集するような専用のアプリは不要。Macの標準機能だけで解決できる。

  • Macのよく使うショートカットキーの記号「⌘⌥⇧⌃」の覚え方

    Macでよく使うキーボードのショートカット記号を毎回忘れる調べるを繰り返して覚えられない。コマンド記号、コントロール、シフト、オプション、オルトキーがある。 Windowsにも、Ctrl、Shift、Altキーがあるが、Macは刻印がないため分からない。混乱する。順番でこじつけとガチ覚えですべて覚えるのではなく、1つ覚えて他を思い出せるようにするのが良い方法。

  • 【Flutter】Riverpodで「Bad state: No ProviderScope found」エラーが出るときの解決方法

    FlutterのRiverpodにて「Bad state: No ProviderScope found」エラーが発生。詳細には「The relevant error-causing widget was: xxPage xxPage:file:///path/main.dart:20:19 When the exception was thrown, this was the stack:」と出力されました。新規プロジェクト作成したときの実行時エラーです。 ProviderScopeをウィジェットツリーのルートに追加する必要がありました。

  • 【マインクラフト】小学生におすすめ簡単で役に立つコマンド5選

    SwitchやiOSやAndroidのスマホ・タブレットなどのマイクラ統合版で役に立つコマンドベスト5です。 長いコマンドは面倒くさいため、短くて小学生でもすぐに使えるコマンドです。欲しいアイテムやモブを手に入れたり、好きな能力(エフェクト)を手に入れることができます。 実際にコマンド大好き小学生がおすすめするトップ5です。 パソコンじゃなくてもコマンドを活用して冒険を楽にしましょう。チートを有効にしてチャット部分からできます。

  • 【iOS】iOS14のWidgetでURLから画像を表示する方法

    ウィジェット(SwiftUI)でWeb上の通信が伴う画像を表示する方法 元々アプリ内で使用している、AlamofireImage、SDWebImage、Kingfisherのような画像キャッシュライブラリは使い回せず、SwiftUI用の画像表示方法を用意 非同期とはいかないが、TableViewのようにいくつもコンテンツがあるわけではないため良しとした。 Objective-Cで使用していたコードをSwiftから使用するためBridgeファイルを作成して試みていたのですが、通信部分の処理などもろもろの都合により、Swiftで同じモデルクラスを書いたほうが速いと判断できたため、結局はウィジェット用にSwiftで新しく書き直しました。

  • 【マネジメント】書籍「ティール組織―新しい働き方のスタイル」より「ティール組織」とは

    イラスト解説ティール組織について要約しています。図が多く分かりやすくまとめられた本です。 サイボウズなど日本でも取り入れている企業も増えてきました。組織の進化をRed、Amber、Orange、Green、Tealと色で段階的に表現しています。 ソフトウェア開発におけるアジャイルもその考えです。働き方改革、不満や限界を感じているCEO、役員、管理者などにおすすめです。 ピラミッド型のヒエラルキーのある組織でトップダウンに指示されるのではなく、家族を超えたひとつの生命体と捉える世界観(パラダイム)です。 心理的安全性をもち、失敗をさらけ出すミーティングやストーリーテリング、マインドフルネスなど有効です。 [予測→制御]ではなく[感受→応答]を目指します。サーヴァントリーダーの配置も有効です。 まとめたマインドマップも添付します。

  • 【アジャイル】書籍「Clean Agile」より「小規模開発のアジャイルプラクティス」

    アジャイルの基本的な考えから、小規模開発の各視点におけるプラクティスをまとめます。 サークルオブライフを基準に、アジャイルのビジネスからチームの目線に分けて、コミュニケーションのフレームワークと原則を詳しく説明します。 計画ゲーム, 小さなリリース, 受け入れテスト, チーム全体, 持続可能なペース, 共同所有, 継続的インテグレーション, メタファー, ペアリング、ペアプログラミング, シンプルな設計, リファクタリング, テスト駆動開発(TDD), 三点見積り, ストーリーポイント, イテレーション(スプリント), フェボナッチ数列, ベロシティ, バーンダウンチャート, 継続的デリバリー, 継続的ビルド, ユビキタス言語

  • 【アジャイル】書籍「Clean Agile」より「小規模開発のアジャイル入門」

    小さなことをする、小さなソフトウェアチームがうまくやっていくためのアジャイル入門ポイントをまとめます。 アジャイルの概要から採用する理由までアジャイルとはという点をわかりやすく解説します。 スクラムやウォーターフォール 失敗例やメリットなどわかりやすく 書かれており、ビジネス、開発チーム、様々な目線でプラクティスが分類されています。マネジメントのトレードオフになる「品質」「速度」「費用」「完成」の鉄十字 イテレーションやスプリントという定期的な期間に分割し、「スケジュール」「スタッフ」「クオリティ」「スコープ」を調整します。

  • 【iOS】オープンソースライブラリを探すために知っておくべきサイト

    サードパーティー製ライブラリを使うために知っておくとよいこと 専用検索サイトを使用すると見やすく、新着や流行り、人気、安全面で適している。 githubを基本として、Cocoa Controls、Swift Package Registry、Swift Package IndexなどSwift Package Managerをサポートするものもあり。デモもあり、見やすい。ピックアップライブラリと新着情報を確認できる専用アプリも公開・リリースしました。「OSSSampler」

  • Amazon Musicで「申し訳ありませんが、このアルバムはご利用いただくことができません」と出てしまうときの対処法

    Amazonで購入した音楽をAmazon Musicアプリで聞けない場合の対処方法 Amazon Music Unlimitedでも聴けない曲はデジタルミュージックからMP3を買える場合があります。イチケイのカラスのサウンドトラックの例です。 「サービスエラー エラーが起きました。再度お試しください。問題が解決されない場合は、カスタマーサービスまでご連絡ください。」などブラウザの今すぐ聴くボタンでエラーが表示され聴くことができず、アプリで検索しても購入した曲が見当たらないということがあり、見つけることができません。マイミュージックから検索する方法があります。

  • 【Android】2021年8月からはAPKではなくAAB(Android App Bundle)が必須化

    Google PlayでAndroidアプリを公開するにはAPKではなく「Android App Bundle」が必須と発表。 ABBへの移行は簡単で、ファイルサイズを小さくでき、インストールが高速になり、ストレージが確保できるメリットがある。また、バイナリのダウンロードサイズの制限が、APKでは100MBのところ、Android App Bundleでは150MBに引き上げられるため恩恵は大きいでしょう。

  • 【iOS】UI系おすすめオープンソースライブラリ

    画面をリッチにするおすすめUI系ライブラリ リッチなUIにするためのサードパーティー製ライブラリを紹介 ヒーラー有名なアプリで使われたり、最近の流行りなどおすすめのオープンソースが知りたい タブ関連

  • 【iOS】配列を効率よく使いこなすmap、filter、reduceなどのシーケンスプロトコル

    コレクション(Collection)を賢くスマートに扱うためのmap、filter、reduceなどのシーケンスプロトコルの代表格の3つを紹介。出力用の変数宣言とfor文を省略することが可能。 配列のまま変換したり、配列から一部抽出したり、配列の合計値をとることが可能。for文との比較、$0、$1を使用したクロージャの具体例で説明。 forEach(_:) filter(_:) map(_:) flatMap(_:) compactMap(_:) reduce(_:_:)

  • 【iOS】クラス名の文字列からViewControllerクラスを生成する方法

    String型のクラス名からUIViewControllerのインスタンスを生成する方法 画面名から画面ごとのViewControllerインスタンスを生成する方法 ヒーラークラス名からのクラス生成は

  • 【iOS】イベント通知をオブジェクト間でする方法

    イベント通知する3つの方法 デリゲート・クロージャー・オブザーバーの特徴と使いどころ・利用すべきときを具体例としてサンプルで解説 別の画面や別のクラスの非同期処理の結果を受けてデータ更新後、画面を再描画、再表示したい場合など 例えばダウンロードとローディング(インジケーター:UIActivityIndicatorView)のクルクルアニメーションの関係など protocol delegate completeHandler completion @escaping NotificationCenter

  • Amazon・楽天など迷惑メールの内容まとめ

    Amazonや楽天などのオンラインショッピングサイトや三井住友、三菱UFJなどの金融機関に多いフィッシング詐欺を狙ったなりすましメールの対策と、実際のメール内容をまとめて紹介します。 「【Amazon.co.jp】注文状況をご確認ください」などの件名で不安をあおる偽メールが頻発しています。 ヨドバシカメラのヨドバシドットコムやその他以下の報告もあります。 JCBカード 三菱UFJニコスカード JACCSカード エポスカード アメリカンエクスプレス ビューカード イオンカード ファミマTカード au 佐川急便 日本郵便 Netflix bitFlyer 東京電力 送信元メールアドレスが正しい場合でもなりすましの場合があります。

  • 【初心者〜中級者】書籍「良いコードを書く技術」より「良いコード」とは

    プラグラマーのバイブルである書籍「[増補改訂]良いコードを書く技術 読みやすく保守しやすいプログラミング作法」より、よりよい美しいコードを書く方法の名前付けについてまとめます。良いコードとは何か、良いコードの定義は4つあります。追加など更新点は大きく3つあります。 名前付けの基本は以下の5つです。 良い名前の条件 一貫性がある 英語でつけられている イディオムに従っている コーディング標準に従っている

  • ドラクエウォークのGPS取得方法AとBの違いとは(ログから解析)

    ドラクエウォークのシステム設定にある位置情報の取得方法のAとBの違いは未だに明らかになっていません。 運用に問い合わせても、詳しい回答はありません。GPSとWiFiと解説しているのは間違いです。 「GPSの信号を探しています」と表示され、通信制限や電波遮断などの状況で使うべき機能なのは分かりますが、AとBが何を表していてどんなときにモードを切り替えるのかわかりません。AからBに切り替えて改善する傾向はあるようです。Wi-Fiが繋がりにくかったり、公衆WiFiなどで勝手に繋がった場合や未認証の場合かもしれません。権限の違いでもなさそうです。 正確な位置情報(GPSとネットワーク基地局「ACCESS_FINE_LOCATION」 GPSに加えWi-Fi、セルラー、モバイルデータからできる限り正確な位置情報の特定する。 大まかな位置情報(ネットワーク測位)へのアクセス「ACCESS_COARSE_LOCATION」 Wi-Fiかセルラー(モバイルルータ)を使用し、都市の1区画程度の制度で位置情報の特定する。

  • 【Android】タイプライターのように1文字ずつ表示するTextViewを作る方法(Kotlin)

    タイプライターやテレビのクイズ番組の問題文のアニメーションのように、時間差で少しずつテキストを表示する方法。TextViewの文字列を段階的に表示します。Handlerを使用して1文字ずつ一定間隔で表示します。表示スピードを変えることもできます。表示速度(間隔)時間のデフォルト0.05秒(50ミリ秒)です。停止、一時停止、再開のメソッドもあります。テキストに動きを付けることで、伝えたいメッセージを強調したり注目を得ることができます。TextViewを継承したTypewriterTextViewを作りました。ソースコードはgithubにもあります。 https://github.com/yoshidaipon/TypewriterTextView 具体例ではクイズの問題文を1文字ずつ徐々に表示して、問題を読み上げているような雰囲気を出します。

  • ドラクエウォークから分かる確認ダイアログのUX改善

    確認ポップアップで誤解を招きやすいアンチパターンとUX向上のための改善案を紹介します。 ドラクエウォークの連戦をあきらめるときの内容が分かりにくく解釈に一瞬迷い取り返しがつかなくなる恐れがある。 二重否定と質問と回答の間に説明があることで直感的でなくなっている点が挙げられる。Apple(iOS)とGoogle(Android)のガイドラインに従い、ポジティブとネガティブの文言、表現を見直すべき。

  • Chromeで「ドライブ用アプリケーション ランチャー(Google)が追加されました」と出た場合の対処法

    Chromeブラウザでエラーが表示され、Googleドライブの拡張機能を有効にすることを求められた場合の対処法 突然ブラウザ右上にエラーが出て、権限アクセスに関する警告と選択肢に警戒します。 パソコン上の別のプログラムより、Chromeの動作方法を変更する可能性のある機能拡張が追加されました。 次の権限にアクセス可能: ・連携するネイティブアプリケーションと通信 「Chromeから削除」「機能拡張を有効にする」 ドライブ用アプリケーション ランチャー(Google)とは、ウェブ上におけるGoogleドライブを便利に使える機能拡張。個人情報漏洩回避などセキュリティ的に提供元や権限、サイトへのアクセスを確認しましょう。

  • 【Android】AlertDialogの表示位置を変える方法

    アラートダイアログの表示位置を変更する方法 画面中央に表示されるポップアップでは指が届きにくくUX的に相応しくないこともあり画面下部に寄せたい。 また、ダイアログの外側をタップした場合のイベントからアクションを指定することもできるため、ダイアログを閉じたときと合わせてUX改善につながればと思います。 val dialog = AlertDialog.Builder(requireContext()).setTitle(title).setNegativeButton(R.string.cancel, { dialog, which -> }.create() //画面下部に表示 val attribute = dialog.window?.attributes attribute?.gravity = Gravity.BOTTOM dialog.window?.attributes = attribute dialog.show() setOnDismissListener

  • 【Android】ルートのFragmentに戻す方法

    FragmentManagerでルートを取得する方法。何度か画面遷移を繰り返した状態で、FragmentManager.popBackStack()で、ひとつ前の画面へ戻せるが、いくつか飛ばして、最初の画面に戻したいことがある。 任意の画面に戻るには、getBackStackEntryAt()を使用してルートIDを取得するか、名前を指定して戻れます。 val rootEntry = parentFragmentManager.getBackStackEntryAt(0) parentFragmentManager.popBackStack( rootEntry.id, FragmentManager.POP_BACK_STACK_INCLUSIVE ) parentFragmentManager.commit { addToBackStack(null) replace(R.id.container, nextFragment) }

  • 【Android】AlertDialogのリスト表示で、ArrayListが渡せずエラーが出た場合の対処法

    「None of the following functions can be called with the arguments supplied.」 リスト項目選択ダイアログで動的な文字列配列を表示しようとした際のエラー。 AlertDialogのsetItemsにArrayListが設定できない。 Array!の必要あり。 toArray()をしただけでは解決せず、CharSequenceを明示的にする必要あり。

  • 【iOS】iOS14.5から必須化されたトラッキング許可ダイアログをどうするか

    AppTrackingTransparencyでトラッキング許可率を上げるための対策 ATT許可ダイアログの文言をどうするか 「他者のAppやWebサイトを横断してあなたのアクティビティの追跡することを許可しますか? Appにトラッキングしないように要求 / 許可」 プライバシーに関するセキュリティ強化により、2021年4月27日リリースのiOS14.5から、デベロッパーは新規アプリ公開およびアプリアップデート時に、App Tracking Transparencyにてトラッキング許可を得る必要が出てきました。 「今までどおり、スマホ内の行動を追跡できるところはして、推測されるユーザーの嗜好・行動の傾向などから、ユーザーに適切な広告を表示したり、おすすめをしたいから許可してね」ということです。IDFA(広告ID)から行動の追跡がされているからこそ、年齢や性別、最近調べた検索キーワードから関連性の近い広告=最適な広告が表示できるわけです。

  • 【iOS】FirebaseのCloud Storageでサーバー上のファイルの日付を確認する方法(Swift)

    Cloud Storage for Firebaseのファイルのメタデータを取得して作成日付や更新日付をチェックする方法 デバイス上のファイルの作成日付と、ストレージに格納してあるファイルの日付を比較して、サーバー上のファイルの日付のほうが新しかったらダウンロードしたいという処理はよくあります。 日付を別で管理したり、一度ダウンロードしてから作成日付をチェックするのでは効率が悪いため、できればサーバー上のファイルを直接確認したいところです。 ソースコード例があります。 timeCreated、updated、bucket、generation、fullPath、name、size、contentLanguage,contentTypeなど

  • 【iOS】テレビのクイズ問題テロップのように1文字ずつテキスト表示する方法(Swift)

    テレビのクイズ番組の問題文のアニメーションのように、少しずつテキストを表示する方法。UITextViewやUILabelの文字列を段階的に表示します。タイマーを使用して1文字ずつ一定間隔で表示します。表示スピードを変えることもできます。人は動くものに目がいく傾向があるため、クイズ以外にもユーザーの注目を得たい、強調したい文字や文章がある場合には有効です。 例ではクイズの問題文を1文字ずつ徐々に表示して、問題を読み上げているような雰囲気を出します。文字列を一発で表示するよりもクイズの臨場感が表現することができます。

  • 【iOS】デバッグ時だけログ出力する方法(Swift)

    ロギングのベストプラクティス。Swiftの標準出力関数printが本番リリース時に出力されないよう開発デバッグ時のみログ出力させる方法 print/debugPrint/dumpどれもリリースで出力されてしまうため、ハッキングに繋がるようなセキュリティリスクを回避するために必要。 Objective-Cでのマクロに倣って、ファイル名と関数名、行数(何行目か)の情報も出力できるように対応します。 #define LOG(fmt,...) NSLog((@"%s %d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) public func log(_ items: Any?, file: String = #file, line: Int = #line, function: String = #function)

  • 【Android】Handler() is deprecatedの警告が出た場合の対処法

    「'constructor Handler()' is deprecated. Deprecated in Java」 スプラッシュ画面で数秒を遅らせる処理でHandler().postDelayed()を使用した部分で非推奨との警告が出ました。 予期せず終了(クラッシュ)する恐れがあるため、Looperを明示的に指定する必要があります。 UIに関する処理はメインスレッドで実施する必要があるように、コンストラクタの引数に、メインルーパーを明示的に設定することで解決しました。

  • 【iOS】結局これでいい 環境ごとに設定を変える方法(Swift)

    本番環境、ステージング環境、テスト環境、開発環境などの環境変数をスマートに切り替える方法です。接続先URLなどターゲットで自動的に変わるようにしたベストプラクティス。 ConfigurationsやUser-Defined、XcodeGenやYAMLなど使用例はあるが、Debug、Releaseのビルドモードと並列の位置付けに気持ち悪さ・違和感があります。TARGETSで変わるよう、Target Membershipでリソースに含めるplistやswiftファイルを設定することを考えます。小規模開発ではこれで十分、結局これでよいのでは。 develop、staging、adhoc、production、buildTypes、productFlavors、Build Variants

  • 【iOS】本番・ステージングなど環境ごとに設定を変える方法(Objective-CからSwift)

    Objective-C時代のプロプロセッサマクロを踏襲して、本番、ステージング、開発などの環境変数をスマートに切り替える方法です。 APIの接続先URLなど動作環境を変えるのに、if文、ifdef文なしで意識することなくビルドしたいものです。 pchファイルでdefine定義そのままSwiftで踏襲します。production、adhoc、staging、developのEnvironmentが自動で切り替えられます。

  • 【iOS】Firebase Dynamic Linksでアプリが起動しない

    ダイナミックリンクでiOSのアプリを起動する方法。 リファレンスどおりに設定したつもりでも機能しない。 ディープリンク(DeepLink)やユニバーサルリンク(Universal links)/ アプリリンク(App Links)との違い、関係性を概念図で表現しました。iOSとAndroidを統合した短縮URLを提供してくれます。 従来独自ドメインでapple-app-site-associationを作成・配置する必要があります。Firebaseではカスタムドメインなしの料金は無料で、肩代わりしてくれます。Associated Domainsでapplinks:の接頭辞を付けて設定。

  • サーバー負荷を減らすための簡易的クーポンコード発行とチェック機構のつくり方

    サーバー負担軽減のためハッシュ値を使用して、ランダムでユニークなコードを自動生成する方法 抽選応募のための抽選IDや割引クーポン、特典コードやアクティベートコードのようなコードを、DBの検索負荷を軽減するために効率的に発行するテクニックがあります。 Pythonコードあり CRC32ハッシュ関数を活用して、8桁の文字列を100万件の中からピックアップする例です。

  • Androidのエミュレータで「INSTALL_FAILED_INSUFFICIENT_STORAGE」エラー

    AndroidStudioのエミュレーターでapkインストール時にストレージ不足のエラーが発生したときの対処法 「Error: ADB exited with exit code 1 Performing Streamed Install」 「adb: failed to install /Users/~/flutter_app/build/app/outputs/flutter-apk/app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]」 容量がひっ迫して、apkのインストールができなかったようです。 AVDマネージャーより該当のエミュレーターの設定値を変更しましょう。 Internal Storage SD card: Studio-managed Wipe Data

  • GIFアニメーション画像を無限ループさせる方法

    GIF画像のアニメーションを自動的に繰り返す方法 gifファイルには、1回で止まるものと、無限ループするものとあって違いがある 一度きりで終わらずに、アニメーションを連続的に繰り返し表示したい場合は、Webサイト上のオンラインツールのezgif.comが便利です。加工や設定値の変更ができます。アニメーションスピード(1秒あたりのフレーム数)やリサイズ、容量の圧縮、様々なフォーマット変換などもできます。 delayオプション loopオプション

  • まいぜんシスターズのマイッキーダンスはどこからきたのか

    マインクラフトのゲーム動画でおなじみのYouTuber「まいぜんシスターズ」のマイッキーが踊るマイッキーダンスの元ネタ Emoticons Modで腰を動かしながら両手を左右に振るダンスです。 SNSの投稿からテレビを通して爆発的な人気になりました。 簡単そうですが単純ではないようです。 腰は左右に振るだけですが、両腕は三拍子で動かすためリズムが違い混乱します。 フォートナイトのエモートとしても使われており、海外に広く知られるきっかけにもなりました。 まいぜんシスターズの愛嬌のあるカメのキャラクターのマイッキーは、動画のゲーム中でたびたび踊り出します。

  • noteで表を使う方法

    メディアプラットフォーム「note」で手軽に表を挿入する方法 HTMLやCSSなどの知識不要な代わりにほとんどテキストの装飾ができず、デザインのカスタマイズ性はありません。MicrosoftのExcelやWord、MacのNumbersなどからコピーしたい。できることは、見出し、強調、位置指定(左寄せ or 中央寄せ)、リンク、引用、コードのみでリストや表は使えません。画像をアップロードする手間なくスムーズに表を挿入する方法があります。

  • 【Flutter】Androidのカメラが起動できないときの解決方法

    Androidのカメラ起動時にエラー発生 「[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(no_available_camera, No cameras available for taking pictures., null, null)」 実機およびエミュレーターで発生。 カメラボタンで許可を求めるダイアログが表示されるので許可したあとカメラが起動せずクラッシュはない。 targetSdkVersion 30(Android10)以上の場合、AndroidManifest.xmlへの権限の記載の仕方の仕様が変わった。 uses-featureではなく、queriesで定義する必要があります。 でも可能だが相応しくない。

  • M1 Macでもできる 別のMacのTimeMachineバックアップデータから一部のデータを復元する方法

    M1 Macで、他のMacのTimeMachineバックアップデータから特定のファイルを取得したいときの解決方法 Mac内でファイルを過去にさかのぼりたいときか、Mac買い替えたときの引き継ぎや、故障などで初期化したときの復元用でmacOSのシステム丸ごと復元する機能しかないと思っていました。一部のファイルだけを復元できるかは懐疑的でした。「ほかのバックアップディスクをブラウズ」で可能という情報は古く、現在のmacOSのバージョンでは対応していません。結論としては「DiskImageMounter」を使って復元することができました。

  • Kindle Kid's Book Creatorで作成した絵本のアップロードでエラーになって出版できない場合の対処法

    Kindle Kid's Book Creatorで作成した電子書籍の絵本の入稿時に言語エラーが発生。コンテンツの電子データが完成した後に、システムへ入稿する際のエラーのため最初に知っておかないとやり直しになってしまうため是非知っておいて欲しいポイントです。「ファイルの言語が、本の設定時に選択された言語と一致しません。本の設定時に選択された言語が正しい場合は、ファイルの言語を変更して、再度アップロードしてください。ファイルの言語が正しい場合は、本の設定時に選択した言語を変更してください。」 実はKindle Kids' Book Creator は日本語に対応しておらず、問題なく作業を進められてしまうところが落とし穴でした。

  • 【IT活用例】スマートにアプリダウンロードをしてもらう方法(NFCタグ編)

    個人経営の飲食店・小売店でもできるNFCタグを使ってスマートにアプリダウンロードをしてもらう方法 アプリはあってもダウンロードしてもらえない、なかなかアプリが普及しないにQRコードと共に有効。ICタグやRFIDとも言う。 ・NFCタグは安価で調達可能(1つあたり150円程度) ・1つのNFCタグで、iOSとAndroidそれぞれのアプリストアへ対応 ・Suicaのような非接触のスマホタッチ(かざす)だけでOK FirebaseのDynamicLinks(ダイナミックリンク)を使用 名刺サイズのカードや三角柱の卓上ポップと組み合わせて効果あり

  • 【Flutter】Sliderのlabelを非表示にする方法

    スライダーウィジェットのラベルの表示を消す方法。(Material Design slider widget) スライダーのトグルを押している間に、トグル上部に値が吹き出し(ポップアップ)表示されます。省略やnullだとエラー「'!_needsLayout': is not true.」になります。SliderThemeで設定可能です。 Exception caught by rendering library The following assertion was thrown during paint(): 'package:flutter/src/painting/text_painter.dart': Failed assertion: line 497 pos 12:

  • 【Flutter】Pub getで「It looks like pub.dartlang.org is having some trouble」エラーで失敗するときの解決方法

    Flutterのpub getでパッケージインストールをした際に「It looks like pub.dartlang.org is having some trouble. Pub will wait for a while before trying to connect again.」エラーが発生。その他、pub upgradeやpub outdatedでも同様です。「pub get failed (server unavailable)」と出力され応答がない場合もありました。 アンチウイルスソフトのavastが影響していました。

  • 【Flutter】他言語対応で文字列取得時に「NoSuchMethodError」でnullが返る場合の解決方法

    Flutterにて「NoSuchMethodError: The getter '~' was called on null.」が実機やエミュレータに表示。AndroidStudioのコンソールにも「The following NoSuchMethodError was thrown building MyApp(dirty): The getter 'title' was called on null.」 MyApp extends StatelessWidgetのMaterialAppを返す引数内でローカライズの処理を実行 title: S.of(context).title 部分でnullが返りエラー。 他言語対応はFlutter Intlでgenerateされたintl_en.arbなど使用。

  • AppStoreConnectアップロードで「App Store Connect Operation Error」エラーが出た場合の対処法

    XcodeでバイナリをAppStoreConnectにアップロードしたところ「App Store Connect Operation Error」が発生。1015エラーと1004エラーのケースあり。Apple側の問題です。 「App Store Connect Operation Error An error occurred saving your changes to the Apple database. This problem may be a transient issue on the Apple side. If the problem persists for more than an hour, please contact your iTunes representative. (1015)」 「App Store Connect Operation Error Exception occurred when creating MZContentProviderUpload for provider. (1004)」 Appleのシステム状況が確認できます。「データベースへの変更の保存中にエラーが発生し、Apple側の一時的な問題の可能性があります。問題が1時間以上続く場合はお問い合わせください」とあります。

  • 【Flutter】pubspec.yamlで追加するパッケージの最新バージョンを知る方法

    Flutterのpubspec.yamlでパッケージインストールするときに最新のバージョンを確認して指定したい場合の方法です。 何も考えずに最新バージョンをインストールするならバージョン指定は不要ですが、他のパッケージとの整合性や、チームとして安定バージョンを揃えるたい場合、あえてバージョンを指定したいと思います。バージョンはpub outdatedコマンドで確認できます。Android Studio上では右上の「Pub outdated」ボタンから可能です。

  • M1 MacでAndroidエミュレーターが起動しないときの対処法

    Apple Silicon(M1チップ)のMacでAndroid StudioからAVDが起動できないときの解決方法。 「Your CPU does not support VT-x」 「The emulator process for AVD was killed.」 例はFlutterでFirebase Cloud Firestoreからデータ取得する際のエラー。 公式で配布されている「Android Emulator Apple Silicon Preview」で起動はできるが、通信でエラー 「Failed to update ssl context: com.google.android.gms.common.GooglePlayServicesNotAvailableException」 AVDのABIはx86もx86_64もダメですがarm64で解決しました。

  • 【Flutter】大量の「Error retrieving thread information: (ipc/send) invalid destination port」エラーが出る場合の解決方法

    Flutterにて「Error retrieving thread information: (ipc/send) invalid destination port」エラーがAndroidStudioのコンソールに連続的に発生。M1 Macが影響していそう。 発生元はprofiler_metrics_ios.mm。 Macの再起動で解決するようなコメントも見つけましたが、それでは解決しませんでした。結果的には、以下コマンドでFlutterを最新のmasterでリビルドすることで解決しました。

  • 簡単にSlackの一定期間経過した投稿を自動で削除する方法

    Google Apps Script(GAS)を利用して手軽にSlackの一定期間過ぎた指定チャンネルの投稿を自動的に削除する方法。無料のフリープランの最大10,000件ではすぐに過去メッセージが見れなくなるため、不要なものは消したい。 Googleスプレッドシートで指定したチャンネルを日時のトリガーで削除スクリプトを起動させる。 channelsと指定していたSlackAPIが仕様変更でConversationsAPIへ。 レスポンスコード429の"ratelimited"エラーには注意。

  • Android12ではAVIF画像がサポート

    Android12でサポートされる次世代画像フォーマットAVIFとは GoogleがAndroid 12の開発者向けプレビュー版を公開し発表 JPEG、PNG、GIFの良いとこ取りのWebPよりも優れた圧縮率 Amazon、Cisco、Google、Intel、Microsoft、Mozilla、Netflix、ARM、NVIDIA、Hulu、Facebook、Appleと名だたる大企業が開発に関係する

  • マイクラのマルチプレイで「世界に接続できませんでした」となってしまうときの対処法

    iOSのマインクラフトのクロスプレイで「世界に接続できませんでした」とエラーになるときの対処法 iPad、iPhoneなどにおいて家庭内LANのローカルネットワークでの解決法です。スイッチとスマホなので統合版(PE版・BE版)です。 iOS14アップデート後であればアクセス権限が怪しいです。 事例は家内ネットワークでのSwithとAndroidとiOSのクロスプラットフォームで、正確にいうと、AndroidはAmazon Fire タブレットアプリです。

  • 【時短ツール】手軽にGIFアニメーションをつくる方法

    ブログや説明のため数秒の動画を簡単にGIFアニメーションを作る方法。 標準ツールでは動画撮影に面倒。しかし静止画では伝わりにくい。無料で7秒間の動画を.gifファイルでダウンロードできるアプリが「Gyazo GIF」 Wordpressなどブログに貼り付けるとアニメーションが動かないケースがあり注意が必要。

  • 3Dモデルを簡単に手早く作る方法

    ARKitやARCore用に簡単な3Dモデルを手軽に手早く作る方法。販売・配布サイトには数が少ない。複雑なモデリングツールは不要。マインクラフトのように積み木感覚で直感的でシンプルなツール・アプリ。obj、dae形式でエクスポートでき、Xcode上でscnファイルに変換できます。ライセンスフリーを探すより自作したい、無料ツールでユーザー登録不要もあるのでおすすめ。

  • iOSアプリの公開に必要なスクリーンショット画像サイズまとめ

    AppStoreConnectでiOSアプリの公開に必要なスクリーンショット画像のピクセルサイズと最低限の要件について。 リリース時に忘れがち。デバイスのディスプレイサイズ毎の6.5インチ、5.5インチのiPhone、12.9インチのiPadの中で各3枚以上必要で、ベゼルあり、ベゼルなしを考慮する必要あり。 JPGまたはPNG形式(透過NG)で、RGB色空間を使用する必要あり。

  • アプリ開発時のファイルツリーのベストプラクティス

    iOS(Android)のディレクトリ配置のベストプラクティスです。SwiftのMVVMの例です。Xcodeのナビゲーターエリアのファイルツリーのディレクトリ構成の最適化。Model、View、Controller、ViewModel、API、Utils ViewController、Extensions、Constants

  • M1チップのMacで「UIImagePickerController」で写真を選んで選択ボタンを押すとクラッシュする

    Apple SiliconのMacでImagePickerの決定時にクラッシュしたときの解決方法。イメージピッカーでで選択ボタンを押したら[NSURL URLByAppendingPathExtension:]: component, components, or pathExtension cannot be nil. M1 Mac、シミュレータ、CococaPods、Firebase、Excluded Architectures、arm64、iOS14がキー。

  • M1チップのMacで「error: the linked framework 'Pods_~' missing one or more architectures required by this target: x86_64.」エラーが出る場合の解決方法

    Apple Silicon(M1チップ)のMacでビルドエラーが発生したときの解決方法 Apple Silicon (Apple M1チップ)のMac mini(macOS Big Sur)でCoco

  • SimulatorTrampoline.xpcから〜フォルダ内のファイルにアクセスしようとしています。と出たときの対処法

    SimulatorTrampoline.xpcから〜フォルダ内のファイルにアクセスしようとしています。と出たときの対処法 SimulatorTrampline.xpcって何だ?怪しい。と思いますよね。 SimulatorTrampline.xpcとは、Xcodeのシミュレーター関連のファイルです。 macOSもファイルアクセスがセキュアになったことでアプリ個別に許可が必要になりました。

  • M1チップのMac miniのセットアップでハマったこと

    M1チップのMac miniのセットアップでハマったこと ・Thunderbirdが激遅に ・pod installでエラーが発生 ・arm64に関連するリンカエラー発生 ・プレビューアプリが動かなくなる ・ディスプレイが認識しなくなる 「linker command failed with exit code 1」エラーが発生 FIRAnalytics、arm64に関連するリンカエラー

  • M1チップのMacで「linker command failed with exit code 1 ('' for architecture arm64)」エラーが出る場合の解決方法

    Apple Silicon(M1チップ)のMacでシミュレーターのビルド実行時にエラーが発生したときの解決方法。pod install後、arm64関連のリンカエラーが発生しました。 FIRAnalyticsConnector' for architecture arm64 clang: error: linker command failed with exit code 1 FirebaseAnalytics、arm64と、XCode12の関連するリンクエラーです。

  • M1チップのMacでCocoaPodsのエラー出る場合の解決方法

    Apple Silicon (Apple M1チップ)のMac mini(macOS Big Sur)でCocoaPodsのpod install(pod update)コマンドでエラーが発生しました。 LoadError [!] Oh no, an error occurred. 従来のMacbookで成功実績のあるpodfileに対してエラーが発生したので、M1チップが怪しい。

  • macOS Big Surで隠しファイルを表示させる方法

    macOS「Big Sur」で隠しファイルを常に表示させる方法。 Macの初期設定だと、隠しファイルが見えずに、.sshフォルダや、.git、.gitignoreファイルが見えない状態です。見つからなくて一瞬焦った! Apple M1チップのMac mini(macOS Big Sur)で試しましたが、従来と同様の方法で実現可能です。

  • macOS Big SurでThunderbirdが激遅になったときの対処方法

    macOS「Big Sur」でメーラーソフトの「Thunbderbird」の動作が遅くなったときの対処方法 インストールしたのはいいものの、動きが激遅でストレスMAX。 メール設定を済ませたところ、左のメールフォルダ表示部分でスクロールの度に止まって動きが鈍くなりました。また、クリック後に本文が表示されるまでの待ち時間も長いです。原因は不明なのですが、M1チップだからというより、macOSがBig Surであることに起因しているようです。

  • MacのDockがサブディスプレイに移動した場合の解決方法

    MacbookなどMacでドックがどっかいっちゃったと、マルチディスプレイで使っているとDockがいつの間にか別のモニターに移動してしまったということがありますが、これをショートカットで簡単に手軽に元の画面に戻す方法があります。設定アプリのディスプレイから、配置タブでメインディスプレイを選択することで直すこともできますが、もっと簡単に復元可能です。

  • AppStoreConnectアップロードで「ITMS-90626」エラーが出た場合の対処法

    Xcodeで作成したバイナリをAppStoreConnectにアップロードしたところ、アップロードは成功したが、メールでITMS-90626エラーの通知がきた。 「ITMS-90626: Invalid Siri Support - Localized title for custom intent: 'Configuration' not found for locale: ja」iOS14から追加されたWidgetKitが関係するかもしれない。Siri Intent Definitionとローカライズ関連のエラー。永続化データをウィジェット側で取得するため、UserDefaultsとApp Groupsの設定も関係あるかもしれない。

  • いつも忘れてしまうC0/C1/C2カバレッジまとめ

    毎回忘れがちなテストカバレッジ(網羅率)の種類(C0/C1/C2)まとめ 検査網羅率(テストカバレージ) のことを指し、どれだけテストしたか測定/分析し、ソフトウェアの品質を向上させることができます。静的解析ツールC++testなどもあります。 命令網羅(ステートメント・カバレッジ) 分岐網羅(ブランチ・カバレッジ) ※判定条件網羅(ディシジョン・カバレッジ) 条件網羅(コンディション・カバレッジ) コードの具体例でテストケースを考えます。 C2カバレッジが100%になったとしても、C0、C1が100%になるとは限りません。 C2は複合条件網羅として混同されることがあります。

  • 【IT活用例】iPhoneが持つポテンシャルを活かしたアプリアイデア3選

    ポケモンGOで浸透したAR/VRを活用したアプリアイデア ARKitによる仮想空間とスマホやタブレットなどデバイスが持つ様々なセンサー(カメラ、ジャイロ、GPS(位置情報)など)を融合した新しい体験が手軽にできます。 ・フェイスペイントをつくろう(FaceTracking) ・車のオリジナルデザイン(三面図、平面検出) ・VRによるセグウェイ擬似体験(ハコスコ、360度動画)

  • 【iOS】UILabelやUITextViewを自動スクロールしたい

    UIScrollView上のテキストを自動的にスクロールさせる方法。エンドロール(スタッフロール)のようなイメージ。 UITableView同様、外側と内側のConstraints制約が必要。内側の制約に幅高さも追加しないと警告が出ます。 autoScrollメソッドを機能拡張で作成し、アニメーションを使用します。 Objective-cとSwiftのサンプルプログラムを載せておきます。カテゴリとextensionを使用した例です。

  • iOSのiMessageステッカーをカスタマイズする方法

    Sticker Pack Applicationで作成したiPhoneのメッセージアプリで使えるスタンプ一覧の見た目を変更したい。 LINEスタンプを作ったついでに手軽に公開できます。カスタマイズするには「iMessage Application」で作成する必要があります。Nintendoのアプリ「スーパーマリオラン」がよい例で、ラベルの追加や背景色や背景画像を設定することも可能です。

arrow_drop_down

ブログリーダー」を活用して、naturalmindさんをフォローしませんか?

ハンドル名
naturalmindさん
ブログタイトル
notwork | モバイルアプリ開発情報
フォロー
notwork | モバイルアプリ開発情報

にほんブログ村 カテゴリー一覧

商用