現在、MapKitを使ったアプリを作成しており、大量の住所データにオリジナルピンを置いていく工程があります。
そこで住所の文字データを緯度経度の座標に変換させるCoreLocation 内のCLGeocoderクラス(ジオコーディング)を利用しました。
※緯度経度の座標から住所に変換する逆ジオコーディングも出来ます
そんな便利屋CLGeocoderにも苦手なことはある様で、大きく2つ気をつける点がある事、それに対して自分なりの解決策も含めてご紹介します。
【具体的には】
・ピンが表示されたり、表示されなかったりして毎回挙動が不安定だぞ!?
・断固として表示してくれないピンがあるぞ!?
・逆ジオコーディングで座標から日本の住所形式に変換する方法 などなど
ブログを自作するには、Hugo(Go)、Gatsby(JavaScript)、Jekyll(Ruby)などのフレームワークを使うことが多いと思います。
「ブログをSwiftで作りたい…!」
こう思ったことはありませんか?
実はPublishというSwiftでブログを作れるフレームワークがあります。
こちらを使うことで、HTMLをSwift、記事をMarkdownで書くことができます。
私は実際にPublishを使ってブログを運営しており、そこで学んだコツやノウハウを紹介します。
リポジトリをパブリックにすれば、無料でGitHub Pagesへデプロイまでできるようになります。
このトークを聞いて、ぜひSwiftでWebサイトを作ってみましょう!
SwiftUIのPreferenceKeyは子Viewが親Viewと通信する際に利用できる便利な仕組みです。
PreferenceKeyをうまく活用すれば、SwiftUIで実現できないと思っていたView が作れるようになることもあります。
しかし、PreferenceKeyに関する情報は少ないため、とっつきにくいと感じる方もいるのではないでしょうか。
このトークでは、以下の内容で発表しPreferenceKeyを今日から使えるようになることを目指します。
Asset Catalogを使ってカラーの管理が出来るNamed Colorという機能、便利ですよね。
しかし、カラー名の変更が必要になった際に、Interface Builderで使用しているNamed Colorは参照が更新されません。
XMLをgrepしてカラー名を一括で置換することもできますが、Xcodeでファイルを開いたタイミングで色が適用されdiffが発生することもあります。
このLTでは、このようなNamed Colorの厄介な挙動を1つ1つ紐解いて、Named Colorに変更を加える際のベストプラクティスについて話します。
DocCは、Swiftプロジェクト向けのソースコードベースのドキュメント生成ツールです。
このDocCがXcode 13.3以降、アプリ開発での活用を想定して進化しました。しかし、アプリ開発におけるドキュメントは既にMarkdown等で用意しているプロジェクトも多く、DocCをわざわざ導入しようと思わないかもしれません。
そんなプロジェクトでDocCを活用するのに便利なのが、ドキュメント作成時の生成物であるDocumentation Archiveの利用です。これは、ドキュメントを生成するために必要なclass名や依存関係等の情報が構造化して詰め込まれたものです。これを用いて、プロジェクトの依存関係を自動で見える化し、リファクタリングや新メンバーへの状況共有に役立てることができます。
このトークでは、その具体的な方法とDocumentation Archiveの構成等についてお話します。
iOSアプリ開発に限らず、コードを保守しやすい状態に保つことはとても重要です。
では保守が難しい箇所を特定するにはどうすればいいでしょうか。また、リファクタリング後に何をもって保守がしやすくなったと判断すれば良いでしょうか。
その方法の一つにMaintainability Index(保守容易性指数)の計測があります。
Maintainability Indexとはその名の通り、コードがどれくらい保守しやすいかを表す指標のことであり、VS Codeでは一部の言語で計測することができます。
このトークでは以下のトピックを話します。
このトークがみなさんのコードの保守性の改善のお役に立てば幸いです。
MDMの機能の一つである「Managed App Configuration」を使うと、MDMで配布したアプリごとに個別の設定ができるようになります。会社や教育現場において、全端末に設定を一括で行ったり、アプリの動作を強制変更させたりすることができる、大変便利な機能です。
Managed App Configurationは、アプリ開発者から見るとその仕組みや実装はとても簡単なのですが、MDMを使える環境がないと動作の確認やデバッグが難しいという難点があります。そのため、個人の開発者が対応をするのはなかなか難しいかもしれません。
本トークでは、教育現場でも使われているScratch専用ブラウザアプリ「Scrub」をManaged App Configurationに対応させた経験から、その実装方法や動作確認のやり方、デバッグ、対応のコツなどをお話しします。
iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。
Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。
このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。
iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。
Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。
このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。
世界中のユーザーへ向けてサービス展開する場合、システムのグローバリゼーション及びローカリゼーションが必要です。
ローカリゼーションではまず「特定言語への翻訳対応」が行われますが、その結果としてアプリの開発フロー内で継続的な「翻訳データの管理」と「テキストの翻訳作業」が必要になってしまいます。
日本語、英語の2言語までは「なんとなくスプレッドシートで管理してみる」が通用しなくもないのですが、対応言語数が増えるほど翻訳データ自体と翻訳タスクの管理コストが増え、結果として運用や品質に対して悪影響が出やすくなっていきます。
本トークでは、12言語に対応している「REALITY」アプリの事例をもとに翻訳フローをどのように構築したか、対応言語を増やした結果どのような問題が起きたか、その問題にどう対処しているか、現状の課題は何で今後どうしようと考えているか、などをお話します。
高度な並行アルゴリズムを提供するSwift Async AlgorithmsにAsyncChannelというものがあります。チャネルとはスレッド間でメモリを共有する手法の1つで、特にGo言語での採用により近年一般的になっています。
本発表ではGo言語での使用例を用いてチャネルの概説を、そしてAsyncChannelとの差異に思いを馳せチャネルについて簡単な認識を持つことが目的です。
スレッド間のメモリ共有は、共有メモリを使い危険領域を排他制御等で保護する手法が一般的ですが、チャネルを使うと同期が入出力としてより素直に表現できます。Go言語にはDo not communicate by sharing memory; instead, share memory by communicatingという格言がありますが、 他方、チャネルとバグの研究を取り上げ現実についても触れたいと考えています。
SwiftUIが発表されてから約3年が経過し、最近ではプロダクトでの採用例も見られるようになってきました。
しかしながら、SwiftUI登場以前から運営しているアプリを完全にSwiftUIへ移行するのは簡単なことではありません。
そこで、小さなComponentから徐々にSwiftUI化を行っていくというのは効果的な移行戦略の1つです。
小さな単位で移行を行うことによって、SwiftUIへ移行する上での課題を素早くキャッチし、改善サイクルを徐々に回しながら移行できるというメリットなどがあります。
本トークでは
について、実プロダクトで移行を続けている中で得られた知見や具体例と共に解説します。
株式会社JMDCでは、新規モバイルアプリの立ち上げに向けて企画・開発を進めています。
PMF達成前のプロダクトフェーズでは、優先すべき仮説からコンパクトに素早く検証を行う必要がありますが、時にストアの審査基準がプロダクトフェーズを進める足枷になることもしばしば...
そんな時React Native for Web(RNW)を使えば、モバイルアプリ開発用のリソースをそのままWebに転用し、Web上で高速なイテレーションを回すことができます。本セッションでは、RNWの紹介と、RNWを使った成長戦略を紹介します。
このLTはiOSコミュニティといままで関わったことがない技術広報がなぜプロポーザルを出したのか。そしてどうやって社内のiOSエンジニアを巻き込みプロポーザルを出すに至ったのか。多くの企業が「自社から登壇やプロポーザルが出されない」課題を抱えています。登壇に関する情報発信のノウハウを共有することで多種多様な企業、プロダクトの発表が増え、iOSコミュニティ全体の活性を促進することを期待しています。非エンジニアのかたにとってコミュニティとの関係性を構築していくエッセンスをお届けします。
ダイナミックデスクトップが登場してから早4年。
動く壁紙というのは、身近な存在になってきているのではないでしょうか?
AppStoreにも動く壁紙を設定できるアプリはちらほら存在します。
どのように実装しているのかは謎ですが、壁紙をハックするのはなんだか夢があって楽しそうですよね。
そんな方のために、このLTではmacOSの壁紙に関するハック術を紹介します。
YouTubeの動画も壁紙にできちゃうかもしれません!
この機会にあなたの壁紙をパワーアップしてみませんか?
API が絡む開発を行う際、大抵以下のような複数のビルド設定が必要になるかと思います。
今回 .env と Xcode の Run Script を使って各環境ごとに異なる API 接続用の値をビルド時にアプリに組み込む方法で開発を行ったのでその方法について共有します。
2021年12月、弊社 ROUTE06 においてとある新規アプリの開発プロジェクトがスタートしました。
今振り返ってみて、初めに整えておいて良かったなと思うことをお話しします。
以下のような内容を予定しています。
弊社アプリは長い開発期間の中で多くの負債を抱えていますが、複雑な依存関係や少ない開発リソース(現在iOS開発は1人)で通常施策の実装を行いながら改善する余裕がない等の理由でコアな部分の実装には手を入れられず放置されてきました。
負債の一つとして、弊社アプリには神(オブジェクト)がいらっしゃいます。
そこに含まれている内の一つ、API関連の機能はCodableも無い時代に作られているために現在メンテされていないライブラリに依存をしており、以前から改善したい機能として挙げられていました。
本トークではなんとなくで使われていたOpenAPIドキュメントをコード生成が正しく行えるように整備し、そこからコード生成を行い開発フローに組み込んだ方法について紹介します。
Firebase InApp-Messagigng(以下FIAM)は、Firebaseを導入していれば特別な実装をすることなくAnalyticsのイベントを利用して細かく表示タイミングの制御したり、配信先ユーザーのターゲットを細かく絞って配信することが出来とても便利です。
ただデフォルトの機能のままだとFIAMで表示される画面のデザインがアプリとは合わない、利用できるデザインに制限があるなどしっかり運用しようと思うと物足りない部分があります。
弊社アプリでは、コンテンツをよりよく見せるために動画を再生できるようにしたり、WebP画像を使って通信量を削減するといったカスタマイズを行いました。
本トークでは実際の実装経験をもとにどのようなカスタマイズが出来るのか、どのように作るのか、その他Tipsを紹介します。
また実際にFIAMを利用してどのような効果があったかをお話しします。
TabularDataはiOS 15/macOS 12から追加された、機械学習モデルの学習に使う表形式データを閲覧したり、加工したり、書き出したりするための新しいフレームワークです。
このセッションではオープンデータとして公開されているデータをTabularDataを使ってデータ処理する方法について紹介します。
以下のような内容を紹介する予定です
・TabularDataのAPIの紹介
・表形式データからのサマリー抽出について
・非構造化データの変換
・表形式データの結合