メルカリの開発メンバーがWWDCの厳選した内容を発表する
Recap of WWDC20 に参加してきたのでそのまとめです。
WWDC20 Recap of SwiftUI & Combine Recap of SwiftUI AppStructure 新規にプロジェクトを作るとprojectApp.swift, ContentView.swiftとふたつのファイルが作られる。AppDelegateとSceneDelegateはもうおさらば @main:トップレベルのエントリーポイントであることを示すattribute App protocol: アプリの挙動の構造を決めるApp -> Scene -> Viewといった構造に Scene & WindowGroup: シーンはipadの右と左とで独立したものとして存在できる List and collections lazyVstack:cellが必要になったタイミングで初期化されるようになりました LazyHGrid & LazyVGrid: collectionViewみたいなもの。 NewComponents and effect toolba and label: ツールバーとラベルを設定できるようになった progressview: プログレスバーです Link and openURL: デフォルトでsafariを開ける matchedGeometryEffect: 選択したものを入れ替えたりする時にきれいにアニメーション描画をしてくれる Data Managements @StateObject: ObservableObjectのラッパープロパティ@ObservedObjectだと構造体が初期化されたタイミングで初期化されて、破棄された時に破棄される @StateObjectだと、viewが作られたタイミングで初期化されて、破棄された時に破棄される あるナビゲーションビューのなかで@StateObjectを指定しておくと表示されたタイミングで初期化される SceneStorage : シーン内でいきるストレージ AppStroage: UserDefaultsみたいにつかえるストレージ Recap of combine assigne(to:) @Publisehdプロパティで指定した要素にそのまま流せるようになった The updates to CollectionView iOS Engineer. manoj036 has 17 repositories available. Follow their code on GitHub.manoj036 - Overview - GitHub
Section Snapshots section snapshotを更新するとセクションを更新できる appendメソッドで簡単に要素を追加できる expandメソッドを使うことでセクションのひらくものができる ListConfiguration 個々のセクションが2つの異なるリストに含められる 5つのスタイルが指定できる sidebar plainはios14で使われます PresentatinoAPI tableviewcellににているListCellが追加された。 swipe動作なども設定できるプロパティ(leadingSwipeActionConfiguration)が追加されました CellRegistration ios14ではDequeueで型の変換も自動になる ViewConfiguration ContentConfigurationを渡すことでセルの設定を入れ替えることができるようになった BackgroundまわりやListContentにたいするConfigurationがあります WKWebView new APIs for iOS14 @mustafabaalbaki 様
UIWebCiewより高速で動きます SFSafariViewControllerは最適なタイミングで使われる。 外部JS制御 allowContentJavascript:外部のJSを実行するかを制御できるようになった WebViewのレンダリングを微調整 scalesPageToFitはios13ではつかえなかったが、それと同等の機能として、pageZoomプロパティでズームなどができるようになりました コンテンツの共有 ビットマップ化された画像 PDFサポートしました ビュー内のコンテンツをcreatePDFメソッドを呼ぶことでPDFを作成できるようになりました ユーザのプライバシー強化 インテリジェントな追跡防止 ITPはすべてのWKWebViewアプリでデフォルトで有効になった QA 自社のは動くが、外部のは動かさないという意味か?あってます javaでナビゲーションだけを向こうもできるし、javascriptで有効にしたホワイトリスト一覧もできるし、動かしたいところだけ動かすこともできる AppClips ベースとなるアプリは完成している必要がある インストールされたら自動で起動するので、アプリの機能への素早いアクセスと体験 appstoreで指定されたURLによって起動可能。状況によって起動方法を変えられる appclipsの体験が終わったあと、フルアプリをDLしてくださいといった事もできるので、フルアプリの導線になる 体験例 スムージーやさんにいき、NFCをスキャンするとiPhoneにappclipカードがでるのでopenするとappclipが起動され、スムージーが注文できるようになる NFCによってAppClipExperienceを読み取り、AppClipカードが動きNSUserActivityで制御する カードやタイトルなどをappstoreで設定する 起動方法 NGC, QRコード、safari app banner(webページの上におかれるやつ)、Messages内のリンク、MapsのPlaceCardsを紐付けて起動などができる AppLibraryの最近起動されたアプリの中から起動もできる AppClipCodesというものを読み取ると起動もできる デフォルトは起動できるのはsafari/messagesのみとなっている。NFC、QR、位置情報、複数の事業者が利用スといった場合で起動させたかったらAdvancedAppClipExperiencesを作る必要がある1つのAppClipに対して複数作成できる 呼び出し用のURLを登録する 接頭辞が最も具体的なURLのものが起動する(prefix match) AdvancedAppClipExperiencesの活用例注文機能と、予約機能とでAppClipをわけたりすることもできる store/*というURL、store/cupatinoというURLでわけると、cupatinoに来た場合は具体的にセットしたappclipsが呼ばれる 注意点 appclipsのサイズは10MB以内。外部ライブラリに依存すると難しいので自作しよう AppClipsはキャッシュのような形で保存されているので、使用されないと削除される フルアプリをインストールしたら上書きされる 感想 メルペイに導入は、できるだけ外部ライブラリに依存しないようにはしているが抑える度に依存しないようにするのが難しそうなのと、ログインして入金しないとpaymentが使えない現状があって工夫してpaymentをやらせないといけないので、工夫が必要そう。 観光地などにつかえるのでは。展望台などで、パノラマアプリなどで景色を説明したり、近くの店で貯まるポイントみたいなかたちでやると面白いのでは。 うまくAppClipsを作れれば最高のUXを実現できる まとめ アプリの機能を素早く体験できる サイズは10M以下 UX最高! QA 山手線の各駅にスタンプラリーおくのは良さそうだと思うが、データの保持はできるか?AppClipsからフルアプリへの移行はできる group containerにデータを保持することで、group containerからデータを取り出してフルアプリに引き継げる AppClipsが消えてもgroup containerからデータを取ってこれるのでは? 接頭辞がもっとも具体的というのは? What’s new in Swift? @Kaz_Homma 様
複数クロージャーでもカッコを省略して引数にかける UIView.animate(withDuration: 0.1, animatinos: {
// do something
}, completion: { _ in
// do something
})
↓
UIView.animate(withDuration: 0.1) {
// do something
} completion: { _ in
// do something
})
selfを書く回数が減る UIView.animate(withDuration: 0.1, animatinos: {
self.hoge = ...
}, completion: { _ in
self.hoge = ...
})
↓
UIView.animate(withDuration: 0.1, animatinos: { [self] in
hoge = ...
}, completion: { _ in
hoge = ...
})
しかし、weak selfにした場合は省略できません swiftUIではselfがenumかstructの場合も省略できるようになりました enumにComparableプロトコルが使いやすくなった enum Membership: Int, Comparable {
case base, silver, gold
}
extension Membership: Comparable {
static func < (lhs: Date, rhs: Date) -> Bool {
return lhs.rawValue < rhs.rawValue
}
}
↓
enum Membership: Int, Comparable {
case base, silver, gold
}
比較funcを書かなくても良い!
Enum caseでstatic var static funcを満たすことができる enum JSONDecodingError {
case A
case B(_ key: String)
}
enum JSONDecodingError {
case unknown
static A: JSONDecodingError = unkown
static func B(_ key: String) -> JSONDecodingError { return unkown }
}
↓
enum JSONDecodingError: DecodingError {
case A
case B(_ key: String)
}
protocol DecodingError {
static var A: Self { get }
static func B(_ key: String) -> Self
}
protocolをenumで満たすことができるようになった!
keyPathをクロージャーの代わりに渡せる struct User {
let name: String
let isAdmin:Bool
}
users.map { $0.name } // ["Tom", "Kaz"]
users.map { \.name } // ["Tom", "Kaz"]
mapにkeyPathを渡す場合はextension Collectionを書く必要があったが、swift5.2からは必要なくなった!
QA SE0269の導入後unowned selfのときでも省略できる?その場合もselfは省略できる closureってデフォルトでunowned?→指定しなければコピーしてるので別物 keyPath使ったことないからどういう時に使うのかがわからないswiftUIでassignでプロパティ指定する時に使う 自分で定義はないが、フレームワークで使えと言われたら使う swift uiのforeachやlistはidentifierをわたすとそれに基づいたviewの区別をしてくれるが、あるオブジェクトを渡して、structのなかのfieldをidとして扱うときに、型安全に使えるので使い所だと思いますkeypathを使わないとreflectionやclosureを渡してフィールドを返すみたいな実装が必要になってしまう 安全に動的にアクセスすることが可能になる KVO使った時に文字列を渡していたが、そういう時にkeyPathを使うと安全に使えそう パネルディスカッション iOS14で嬉しい機能、大変だと思う機能 Manoj好きじゃない機能として、ウィゼットが一時間ごとしかアップデートされないのでダイナミックにアップデートしてほしい 英語をしゃべるので翻訳機能がインテグレートされるといい 絵文字のサーチ機能はいい BOTに関して、skip detectionがよい Musfanaウィゼットとappのtipsが良い ウィゼットのどこがいいか?ウィゼットの追加やスクロールダウンする時のapp iconや画面などを見に行ける notification centerもそうだが、いろんな形でダイナミックに使える 色んな所で使えるので開発者のモチベーションが上がると思う Kagemikuapple penceliで文字を書くとtextviewに認識されるscribbleがいい ipadの内部でxcodeでコードを書けたら面白そう apple silicon上だとiosのアプリがmacで動くと言っていたが、macosのアプリもipadに移植する未来もあると思っているがどうかclipがSwiftUIしかかけないが、今後SwiftUIで作っていくので移植を考える前に同じコードで動く未来が来る swiftアセンブリ対応もしてくれたwebでも動いてくれたらswiftコードからどこでも動いたら面白そう Kazuデフォルトのメインアプリ(ブラウザやメール)をかえられるのがいいなとおもった YusukeiPhoneが車のキーになる 無線通信が浸透したら面白そう 鍵や財布がいらない時代になる 今後、体にチップ埋め込んで生体認証になる流れになるような気がしました SwiftUIの進化どうでしょう? Kagemiku順当に進化している collectionviewはなかったが、いい感じに解消された lazy stackいいですよね SFSafariViewControllerに相当するものはないですよね?componentとしてはない。 xcodeやIDE含めて進化していくことでしょう Kazuナビゲーションバー厳しかったが、よくなった 知識をアップデートしなければ swiftUIでもself省略できるようになったがどうか? Musfanaすごい進化してる。iosアプリに将来的に貢献することでしょう。 AppClipsと未来のアプリ体験 Yusukeポイント化アプリはいい 概念はいいが例が浮かばない 制約を守った上で開発となると普及しづらそう 隅田川で遊覧のフェリー通るが、船の上からAR使ってお台場や豊洲みたいな説明ができるようになったらいいと思うがどうか?問題があって、appleとしてはAppClipsはフルアプリに対してAppClipsが存在していて、早くて軽いから使わせたいではなくて使わせていいタイミングで使わせてフルアプリを使わせるみたいなふうに使ってほしい 作った目的としては違う目的として使われてしまうことを懸念 フルアプリを使わせるユースケースを考えるのが難しい 観光で言えば特定の地域で限定させるのではなく、全世界で使えるようなベースアプリであるならいいと思う 有料アプリもAppClipsなら無料アプリで配布できるらしいが、有料版だと進めにくい機能をappclipsでメイン機能だけ無料に使わせてやるのはいいと思うアプリ内課金とどう違うのではと思った →コストがかかるので、実装コストをかけないで済むならAppClipsはいい選択肢だと思った(Sato) ManojメルカリでもAppClipsは有効に使えると思っている 購入のところで、自分が買いたいアイテムを共有したり、qrをスキャンさせたり、apple signinでログインさせて課金させるのがいいと思う Musfanaライドシェアをアプリがなくてもスキャンしてすぐ乗れるのはうまく使える方法なのでは 日本にはない概念?(Yusuke)自転車系などは全然ある(Kagemiku) ログインはSign with Apple、支払いはApple Payといっていたから、初回だけただでのれるということはできそう(Sato) メルカリステーション(物理的店舗)でAppClips使って体験したらメルカリを体験できるケースも良さそう(Kaz) AppClipsでインストールされたアプリでプッシュ通知は使えるか?ONの許諾は必要だが、プッシュ通知は使える。(Yusuke) AppClipsアプリ内広告のミニゲームで使えるかな?試してみないとわからない storekitがAppClipsは使えないので、アプリ内課金がおそらくできない(Sato) SwiftUIもバージョンごとに進化していますが、それに合わせてswiftもより書きやすく進化しているため、さらにアプリが作りやすくなっていくなと感じました。
機能面だけでなく内面側もアップデートしていってより今後のiOSの未来に胸がふくらむセッションでした。
View Comments
I may need your help. I've been doing research on gate io recently, and I've tried a lot of different things. Later, I read your article, and I think your way of writing has given me some innovative ideas, thank you very much.
Your article helped me a lot, is there any more related content? Thanks! https://www.binance.info/id/join?ref=B4EPR6J0
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.