みなさんは以下の4日が何の日かご存知でしょうか?
・1948年5月2日
・1949年4月3日
・1950年5月7日
・1951年5月6日
正解は「日本におけるサマータイムの開始日」です。
実は日本でも1948〜1951年の4シーズンのみ、サマータイムが実施されていたことがあります。
Appleは日本のサマータイムを忠実に再現しており、タイムゾーンをJST(日本標準時)にすることで確認できます。
実際の業務で、サマータイムの開始日の文字列が日付型に変換できず、アプリが強制終了することがありました。
原因の追求とサマータイムの仕組みの調査に苦戦したので、本セッションではそのときのできごとを実際に対応した時間軸に沿って話します。
iOSのバージョンによって挙動が異なる点も苦しめられた一つです。
※本セッションではObjective-Cのコードのみ扱います。ただし、Swiftのみ扱っている方でも理解しやすい内容となっています。
【アジェンダ】
・日本のサマータイムについて
・サマータイムによる不具合の内容
・不具合の調査結果
・対応策の検討と、実際に対応した方法
【想定する聞き手】
・日本にサマータイムが導入されていたことを知らない人
・iOSアプリ開発でサマータイムを考慮したことがない人
【ゴール】
・日本で導入されていたサマータイムの境界日時を知り、取り扱いに気をつける日時だと認識する
・iOSにおける日本のサマータイムの実装を知る
「キング・クリムゾン…1時間もの時間が消し飛び、この世には「サマータイムが発生した」という「結果」だけが残るッ!!」
Swift 5のiOS13から使用できる機能の一つにProperty Delegates(SE-0258)というものがあります。
SwiftUIでも@StateなどすでにPropety Delegatesで実装されたものもあり、目にした方もいらっしゃると思います。
Property Delegatesはとてもユニークな機能で、これまで書いていたボイラープレートを解消できたり、アーキテクチャやコンポーネント設計を考える上でも、重要な機能の一つとなってくるのではないでしょうか?
この発表ではProperty Delegatesとはどのようなものなのかを紹介するとともに、
どのような課題を解決するのか例を踏まえて紹介します。
概要
Property Delegatesとは
実装例の紹介(State、User Defaults、Validation)
Swiftプログラミングにおける継承、抽象化、関心の分離などのこれまでの考え方などを踏まえたProperty Delegatesの役割の考察
アプリ開発の経験が無く、プログラミングそのものの経験も浅い、そんな初心者の困り事の一つは、不具合の原因を特定するのに多くの時間を費やしてしまうこと。
原因特定スピードを上げるにはLLDBデバッガが有効です。
Xcode10.2から登場したvコマンドについて
iOS12から搭載されたAR Measureアプリは、ARKitの精度を証明するとともに、現実のものを何でもスマホで測ることができるという世界を実現しました。しかし、AR Measureの操作には慣れが必要だったり、自分でスマホを持った状態で動き回らなくてはいけないという課題が存在します。そんな課題をCore ML、すなわち「機械学習」を使って解決することができます。例えばフリマアプリなどで服を売りたい時、服の着丈、身幅、肩幅、袖丈などを載せたいと思う人がいると思います。このようにあらかじめ測定したい場所・指標が決まっている場合、機械学習でそれらを測るために必要な点群の位置を推定することができます。点群の位置さえ推定できれば、ユーザーがわざわざARで測らなくても、平面認識と深度推定によって自動的に現実物のサイズを得ることができます。つまり、機械学習で「どこを測るか」を決めて、ARで「それが現実世界でどのくらいの長さなのか」を決めます。今回はTシャツを例に、その着丈、身幅、肩幅、袖丈をARKitとCore MLを使って一瞬でサイズ測定するプロトタイプをお見せします。今回のプロトタイプを応用すれば、インテリアや人の身長など、様々なものを一瞬で測ることができるようになります。この発表では、機械学習によっていかにARのサイズ計測が簡単かつ速くなるか、というお話と、それによって実現できた精度とその改善方法、その過程で使用したモデルなど技術的な知見を共有します!
マーケチームから来る「あくつ〜。プッシュ通知許諾率あげてくれないとリテンション施策打てないよ〜」という声。
平均30%と言われる承諾率だが、何故か僕たちのアプリは17%・・。
プッシュ通知承諾パネルを表示するタイミングは、熟考された上に以下の2つのタイミング。
何が悪いのかさっぱりでしたが、意外なことで解決しました。
ある1つのことをしただけで、プッシュ通知許諾率が全体平均17%から40%にあがったワケとは!?
拘りの強いiOSエンジニア(デザイナー)が陥りやすい罠についてサクッと話します。
開発環境の構築って面倒ですよね。
Xcodeのインストールは時間がかかるし、その他いろんなツールに関して手順書を用意しておいても、ちょっと違うバージョンがうっかり入っちゃうとかよくあります。
このLTでは、毎月数十台のMacをセットアップし続けてきた経験から、Appleの提供する標準機能だけで全く同じ構成のmacOS環境を準備するために行ってきたいくつかの方法と、それぞれの特徴についてお話しします。
また、Sierra -> High Sierra -> Mojaveと毎年バージョンアップされるに伴って利用できる技術が変わっており、現在進行形で困っていることについても話します。
登場人物
文系卒の女子エンジニア
・エンジニア歴=社会人歴のiOSエンジニア
・一部機能追加くらいはSwiftで開発できるようになった
・テストは業務で全く書いたこと無し
5年もののiOSアプリ
・2013年リリースで、リリース当時のコードも現役でバリバリ稼働中
・リリース当時はフルObjective-C、現在は一部Swift化
・テストコードは1行も無し
このLTではテストを書いたことないエンジニアが、年季の入ったアプリにユニットテストを導入するまでの格闘をテスト初心者視点から語ります。
まだテストを書いたことがない方、うちのアプリはレガシーすぎてテストなんて書けないと思っている方が、
テストを書いてみよう!と思ってくれることを目標としています。
入門書を読み終わり、簡単なアプリが作れるようになった!
でもこの後はどうしたらいい?とりあえずアプリを作ったらいいの?
こんなことを思った時期が少なくとも私にはありました
コードをたくさん書くこともとても重要ですが、iOSアプリ開発の世界の広げ方はこれだけではないようです
Swift上級者のコードを覗く、設計について考えてみる、技術書典で技術書を買って読んでみる、有名なライブラリやツールを導入して使ってみる、レビューをもらう、勉強会に参加する、勉強会運営にJOINしてみる、カンファレンスにスタッフとして参加してみる、などなど…
この一年間でSwift初級から中級くらいになるために私がやってきたことや、そこからどのような知見が得られたのかを素直に紹介していきたいと思います
iOSアプリ開発の世界にJOINしたばかりの方々の世界が広がると嬉しいです!
iOS12からAR Quick Look機能が搭載されました。
AR Quick LookはUSDZファイルを設置するだけでSafari等のアプリで3DモデルをAR表示することが出来ます。
ハードウェアやARKitの進化によりARの体験も確実に向上しています。
USDZファイルをサイトに設置することでその恩恵を受けつつユーザー体験やコンバージョンを向上させましょう。
このトークでは、家具ECサイトに導入した事例を元にAR Quick Lookの概要、3Dモデリング、Tips、効果等を紹介します。
WWDC19、一番始めの発表はtvOS 13でした。
マルチユーザ やコントローラーの対応で一見要点をおさえた気になりがちですが、待ってください。
TVServicesを含むフレームワークのアップデートにより、tvOS 13では、従来に比べてより充実したユーザエクスペリエンスを実装することが求められています。
このセッションでは、以下のような項目でtvOS 13の新たな機能の勘所をおさえ、より”immersive”な体験の実装手段をご紹介します。
AppStoreを見渡すと、数え切れないほどの膨大な数のアプリが存在する。
しかしながら私たちがよく使うアプリというのはその中のほんの一部に限らている。例えば、Twitter、Instagramなど、ほとんどが大企業の開発したものだ。
それでは個人デベロッパーが開発したアプリが陽の光を浴びることはないのだろうか?
このセッションでは私が個人開発したアプリが100万DLされるまでの取り組みや改善などを中心に、プロモーションにお金を費やすことのできない個人開発のアプリをより多くの人に利用してもらうための手法やアイディアについてお伝えします。
あなたが作ったアプリをもっと多くの人たちに利用してもらい開発へのモチベーションを高めていきましょう!
iOSエンジニアなら一度は憧れるスマホ連携IoTガジェット。
iOSとの連携が簡単なマイコンや、簡単に基板を設計、発注する方法をご紹介します。
自分だけのオリジナルIoTガジェットを作る楽しみが広がると嬉しいです!
みなさんCI環境はどうされていますか?
最近ではBitriseを使う方が多くなってきていますね!
弊社ではコード管理をGitLabで行なっているため、
GitLabRunnerをiMacで動かしてCI環境を構築しています。
・CIサービス使いたいけどお金かかるから...
・弊社はGitLabじゃないけどBamboo使ってRunner回してる!
などといった方に参考となるお話をさせていただきたいです。
・GitLabRunnerでどんな風にCIを回しているのか
・マージリクエストを出したらテストが回る
・ボタンポチで環境ごとにDeployGate配信
・Releaseタスクではappstoreconnectへのアップロードを自動化
など
・どういう設定しているか、.gitlab-ci.ymlを一部公開
・自前CIのつらみ
EightでiOSアプリを開発しているアマゾネスです。
iOS10から公開されたCallKit。自分のアプリのDBを使用し、着信電話表示を実現するためのAPIです。
Eightは名刺情報の管理をするアプリということもあり、CallKitとの相性は抜群。
実装しようという運びになったのですが、実装者はなぜEightに入ってして二ヶ月目の私。
「データの扱いどうやればいいの泣」「設定画面のぐるぐるが消えないんだけど泣」「突然の機能停止泣」
等、苦労したところをお話させていただこうと思います。
低レイヤーを触ってみたいと思いつつも今まで手が出すことができていなかった私が、今現在Swiftでファミコンエミュレータを作っています(現在進行形)
このトークでは、Swiftを使ってファミコンエミュレータを開発することの楽しさをお伝えします。
ファミコンエミュレータ開発の第一歩がなかなか踏み出せない方の背中を押すことができたら幸いです。
「API通信のデータをJSONで受け取ってEntityに変換する」、みなさんもそういったご経験はあるかと思います。
Swift4でCodableが登場してから、このようなJSONデータをより簡単に変換できるようになりました。
一方で、例えばEntityにユーザーIDや写真IDといった一意に識別する値を単純なInt型やString型で定義してしまうと、引数にユーザーIDを渡すべき関数で誤って同じ型である写真IDを渡してしまう恐れがあります。
ドメイン駆動設計(DDD)における値オブジェクト(Value Object)という戦術的設計を導入し、それぞれ異なる型として定義することで誤った代入を防ぐことができます。
しかしながら、Codableと値オブジェクトの相性は悪く、対応するには工夫が必要となります。
このトークでは、簡単なJSONデータを用いて値オブジェクトを含むEntityへのCodable対応についてお話します。
■アジェンダ
・単純な型を利用した場合のCodable対応
・単純な型を利用した場合の課題
・値オブジェクトとは?
・値オブジェクトとCodableの課題
・値オブジェクトへのCodable対応方法