13 報

Share this post

開發者週報 #2

www.ethanhuang13.com

開發者週報 #2

Apple/iOS 開發者的一週大小事 2019/08/05-11

13
Aug 11, 2019
Share this post

開發者週報 #2

www.ethanhuang13.com

13 的話

謝謝你訂閱 «13的開發者週報»,這是一份給 Apple/iOS 開發者的電子報。每個禮拜一早上你會收到我彙整了前一週的開發資訊。除了官方消息、社群活動、技術資源以外,我也會放入一些台灣的 iOS 工程師在 Twitter 上的討論。

如果你喜歡我整理的資訊,請推薦、轉寄給同事或開發者朋友。

根據上一期的經驗,使用 Gmail 的讀者可能信件會被切掉。請記得按「查看整封郵件」,或是到網站上閱讀。使用 iOS Mail 的讀者請記得點按上方的「載入所有影像」。

官方消息

Beta 6 更新

Apple 在 8/7 推出 iOS、tvOS、watchOS 的 beta 6。macOS 與 Xcode 沒有更新。

Release Notes 連結如下:

  • iOS 13 beta 6

  • tvOS 13 beta 6

  • watchOS 6 beta 6

小技巧:如果想知道每個版本改了什麼 API,可以參考這個網站。

注意事項:

If your watch is running watchOS 6 beta, you must update it to watchOS 6 beta 2 or later before updating to iOS 13 beta 6, otherwise your watch will no longer be able to connect to your phone. (52854192)

⚠️請注意,之前都是提醒要先升級 iOS beta 再升級 watchOS beta。這次是說升級 iOS 13 beta 6 之前先確定 watchOS 6 版本在 beta 2 以上,不然將會無法連線。

Important Updates to CNCopyCurrentNetworkInfo API in iOS 13

開發者應該在 8/8 左右有收到 Apple 針對 CNCopyCurrentNetworkInfo 行為改變的提醒信(就是那封稱呼你為 Dear $firstName 的信)。連結是我把信件內容備份在 gist。

Apple 更新了 iOS 版本分布圖

iOS 12 佔了所有裝置 88%,若以四年內的裝置而言則是 90%。

Apple ASMR: Season 1

Apple 在 YouTube 上新增了一系列的 ASMR 影片,是用 iPhone 拍攝與收音的。目前有四部。既然是 ASMR,建議戴耳機聽囉。

Apple 更新了 USB-C Digital AV 多埠轉接器(HDMI 轉接器)

舊款僅支援 HDMI 1.4,新款支援 HDMI 2.0,所以較新的機種可以輸出 4K、60Hz。

下列機型可顯示 3840 x 2160、60Hz:

iPad Pro 11 吋、iPad Pro 12.9 吋 (第 3 代)、MacBook Pro (15 吋,2017 年與後續機型)、iMac (Retina 5K,27 吋,2017 年與後續機型)、iMac (Retina 4K,21.5 吋,2017 年與後續機型),以及 iMac Pro (2018 年)

AP® Computer Science Principles with Swift

Apple Books,給高中生的電腦課本。

Apple 更新了 Bug Bounties

Twitter avatar for @rmogull
Rich Mogull @rmogull
Massive jump in Apple bug bounties. Now payouts for pre release (with a 50% bonus). Up to $1M for a zero click full chain kernel code execution!!! Releasing a vuln research kit with ssh and more on iOS. Full chain access device (yes a supported hardware platform).
Image
7:54 PM ∙ Aug 8, 2019
588Likes265Retweets

更多細節可見相關報導。

App Store 重新打包 apps 來加速啟動

iOS 13 改進 app 啟動速度其中一個著力點是改變打包的方式。根據員工的推文,App Store 現在已經重新打包完成。要享受這個效果,你需要 iOS 13 beta 6 裝置,並且重新安裝 apps。

重裝個別 app 比較快的方式,是在「設定」/「一般」/「儲存空間」,點選 app 來「卸載」再「重新安裝 App」。

Twitter avatar for @pedantcoder
Pierre Habouzit @pedantcoder
All is now live in Beta 6! You need to reinstall your apps (restore from iCloud is the easiest way) to get the repackaged app version. Then have fun with 2nd/3rd party apps. And yes, the speed improvement happens on all devices (from the 6s to the Xs, iPads too).
Twitter avatar for @pedantcoder
Pierre Habouzit @pedantcoder
https://t.co/90mTfrWQcp https://t.co/RuLBgFCsoe
6:00 PM ∙ Aug 10, 2019
146Likes63Retweets

還有一有些細節可以點推文進去看對話。

正如我在本週的 weak self podcast 所說的,Apple 的工程師現在比較會在 Twitter 上與開發者交流。

社群活動

iOS @ Taipei 8/13二:UICollectionView in iOS 13

Nick: iOS 13 UICollectionView 變得更強大了,聊聊 UICollectionView 的轉變

CocoaHeads Taipei 因颱風延至 8/15四

Twitter avatar for @CocoaHeads_TPE
CocoaHeads Taipei @CocoaHeads_TPE
因颱風利奇馬影響,安全考量與會眾的反應之下,本月的活動延期至下週四(8/15),期待與大家再相見!
Twitter avatar for @CocoaHeads_TPE
CocoaHeads Taipei @CocoaHeads_TPE
8⃣️月份的活動在8⃣️號,錯過不要太難過 https://t.co/HblAU7YwJs
5:19 AM ∙ Aug 8, 2019

已知的講者有 zonble 要講 NSScanner,與藍永倫要賣神奇 T-shirt。

🇹🇼iPlayground

台灣唯一 iOS 開發者辦給 iOS 開發者的技術研討會。今年是第二屆,9/21-22 在台大博雅館。

主辦單位表示議程預定在一週左右公布。去年公布議程之後票很快賣完,所以想參加但又想知道議程再買票的話,可以留意 Twitter。

去年 iPlayground 第一次舉辦,250 張票出售率 100%。其中有 100 張票在公布議程後一週內被秒殺。而今年我們還沒公布議程(將在截稿之後不久公布),已經賣出了 60%。

(本文的作者是我)

購票請到 KKTIX。


職缺

Head of Programming, Taipei

Apple 在台北的「軟體相關」職缺。JD 要看仔細,工作職責主要是 Apple Retail Store 體驗方面,而不是單純寫程式。

Apple Retail Stores represent a focal point in their local community - a place where technology intersects with the arts and education. We are focused on building experiences that inspire you to learn, create something new, and discover something you’ll only find at Apple.

The Programming Lead is an evangelist of this vision, and is responsible for curating and delivering an ongoing program of culturally relevant programming. The Programming Lead will partner closely with Retail Marketing and external talent to conceive, program, implement and execute events through the engagement of musicians, photographers, developers, entrepreneurs and educators, inspiring customers and enhancing the Apple Retail experience.


技術資源

CocoaPods 1.8 beta 預設使用 CDN

以往使用 CocoaPods 時,最曠日廢時的就是在 update pod spec repo 了。現在 CocoaPods 將可以使用 CDN 來大幅加入這個流程。網頁的影片 28 秒開始示範了「秒解」的速度。

升版後,你可以使用以下指令來切換成 CDN。

在 Podfile 裡修改這一行

source 'https://cdn.cocoapods.org/'

輸入:

pod repo remove master

The SwiftPM Library

Dave Verwer 又一力作。你可以把它想成 SwiftPM 版的 cocoapods.org。可以讀一下關於或計畫緣起文章。也可以申請加入你的 package,目前有 946 個。

重新實作 Combine 相容較低版本 iOS

你想用 Combine 但不想等到 iOS 13 嗎?OpenCombine 與 CombineX 也許是個辦法。

CombineRxSwiftPerformance - 比較 Combine 與 RxSwift 效能

有些測試項目接近兩倍速。雖然效能不是選用 framework 的唯一指標,但 Combine 在這方面確實令人印象深刻。

FlickyType - Apple Watch 鍵盤

可以安裝 Public TestFlight。有 SDK(GitHub) 可用。

Twitter avatar for @keleftheriou
Kosta Eleftheriou @keleftheriou
Someone said I was being too accurate in my previous video. Check this out:
Image
5:26 PM ∙ Aug 2, 2019
1,334Likes286Retweets

設計資源

Drama—PixelCut 推出的全新設計工具

PixelCut 之前主要的設計工具是畫完圖以後可以產生程式碼的 PaintCode(其主要概念是,用程式碼畫圖比圖檔更快、更省空間)。新的 Drama 目前 beta 中。看一下它們的 Tutorials,挺有意思的。


根據上一期的經驗,使用 Gmail 的讀者可能信件會被切掉。請記得按「查看整封郵件」。或是到網站上閱讀。

podcast

weak self podcast

三個在 iOS 開發圈打滾的台灣工程師,專為 Apple/iOS 開發者而製作的 Podcast。主講人一三(對就是我😛)、波肥、喬喬。

以下是最新一集的內容簡介:

3: 就是要豪華便當!詹里長 hokila 的技術研討會全攻略

這集邀請到特別來賓 iPlayground 總召—hokila,談談參加技術研討會的一些經驗與心得,以及 iPlayground 想帶給大家的社群氛圍。WWDC 跑 lab 跑到跟 Apple 工程師推坑買東西、日本的筋肉 Swift 是什麼東東,以及 iPlayground 的籌備祕辛,就是要聽 hokila。

⚠️警告!本集不太適合搭捷運或上班聽,怕你憋笑會內傷。

科技島讀 Podcast

這集節目內容跟 iOS 沒有任何關聯,只是因為我發訊息建議島讀開 Twitter 帳號,然後他們就立刻開了。所以幫忙宣傳一下😂

Twitter avatar for @daodutech
daodutech @daodutech
2019-8-5 podcast - 香港反送中的科技對抗 - 去中心化的社會運動 - 臉部辨識與數位資料 - 與 Matters 共同創辦人張潔平對談
daodu.tech[音頻] 戴上面具去遊行|特別來賓 Matters 共同創辦人張潔平香港這個緊密、現代化的城市,正快速的建起抵禦監控的防禦網。從香港的第一線,張潔平說明香港民眾 5 年來對政府、社會運動以及科技的態度如何轉變。
2:10 AM ∙ Aug 5, 2019
10Likes7Retweets

推特上的大小事

這個區塊會放一些台灣的 iOS 開發者在 Twitter 上的討論,或者有些新知的發表不寫文章直接發推。討論串如果有個別回覆,就會變成分支而且不好追,我也沒有辦法全部的推文都貼,所以只抓幾個分支,請你有興趣自己點進去看。標題是我隨意取的,當分隔線而已。

用 enum 當 namespace

如果把某個 type 純粹當 namespace(底下都是 static 而沒有任何 instance ),用空的 enum 比用 struct 還好,因為可以省下編譯器幫你寫個空的 init()。這不是什麼隱藏神技,Apple 也是這樣做的。

Twitter avatar for @gregheo
Greg Heo @gregheo
Only just noticed: the Combine framework uses the "trick" of enums as namespaces 👍 developer.apple.com/documentation/…T
Image
11:01 PM ∙ Aug 4, 2019
12Likes2Retweets

Network Manager

Twitter avatar for @lihenghsu
Li-Heng Hsu @lihenghsu
最近在 FB 社團裡看到幾篇分享用 #Swift 建 Manager 物件去做網路 API 請求的教學,覺得現在才發表這個會不會有點晚了?再過兩個月 Combine 都變正式版了,我已經感覺不太到再自己寫 NetworkManager 的需求,全部都用 FRP 寫在呼叫處就好。大概只剩下 URLRequest 可以寫在別的地方。 #SwiftTaiwan
8:56 AM ∙ Aug 4, 2019

優化 App Launch Time

Twitter avatar for @GanNaSong
我要當特級廚師🔪🥩🔥🍺 @GanNaSong
想請問大家都是怎樣優化 app startup time 的,做了一些調整但是成效實在很薄弱
3:28 AM ∙ Aug 5, 2019
Twitter avatar for @PofatTseng
Pofat @PofatTseng
@joe_trash_talk @ethanhuang13 @GanNaSong @theiPlayground 認真問做了什麼調整? launch time基本上分 pre-main, post-main (算到 first frame displayed 為止) pre-main 就是 load / rebase / bind /oc setup / initializer 你能改善的就是 load + initializer,其它只有祈禱少用點 OC,post-main 就完全看 app 架構了,一句話,沒必要的往後丟就是
6:33 AM ∙ Aug 5, 2019
Twitter avatar for @GanNaSong
我要當特級廚師🔪🥩🔥🍺 @GanNaSong
@PofatTseng @joe_trash_talk @ethanhuang13 @theiPlayground 針對各階段處理如下: 1.pre-main: - 有查到 dynamic framework 數量越多 dylib 時間會越長 ,所以重新檢視使用的 libries 並且拔掉一些可以自己處理的部分 2.didFinishLaunchingWithOptions: - 把部分需要在一開始就做設定的 SDK 丟掉背景去做 - 把沒必要一開始就設定的 SDK 移開
7:37 AM ∙ Aug 5, 2019

📊Tracking API 設計投票

Twitter avatar for @ethanhuang13
13 一三 @ethanhuang13
📊投票:你喜歡哪種 API?參數是 Event 跟 EventParameter(s),考慮名稱、排版、易讀性等等。沒辦法放圖所以請點連結看 code gist.github.com/ethanhuang13/1…
gist.github.comTracker API PollTracker API Poll. GitHub Gist: instantly share code, notes, and snippets.
8:49 AM ∙ Aug 5, 2019

Apple Card 超想當你的預設付款方式

雖然目前只能乾瞪眼,但是看看 Apple Card 的 UX 也是挺有意思的🤤

Twitter avatar for @reckless
nilay patel @reckless
Hey how badly does Apple want to be your default card in Wallet? It doesn’t say “no thanks,” at this prompt, it says “Set as default later”
Image
10:54 AM ∙ Aug 6, 2019
69Likes11Retweets
Twitter avatar for @reckless
nilay patel @reckless
You get the feeling Apple would like to be your default card in Wallet
Image
10:55 AM ∙ Aug 6, 2019
Twitter avatar for @ZachHonig
Zach Honig @ZachHonig
Coolest credit card activation ever 🤓l
Image
1:57 AM ∙ Aug 7, 2019
14,527Likes4,476Retweets

這兩個不一樣

Twitter avatar for @marslin_dev
Mars @marslin_dev
原來這兩個完全不一樣啊~
Image
7:01 PM ∙ Aug 6, 2019
Twitter avatar for @marslin_dev
Mars @marslin_dev
上面是 char array,下面是 ReversedCollection
12:35 PM ∙ Aug 7, 2019

小綠又開串了,這次是 map vs flatMap

Twitter avatar for @handkid
Green @handkid
今晚想跟大家討論 map and flatMap 1. 有什麼差異 2. 大家都怎麼用 3. 有什麼特殊用法 #今晚來討論 #波肥挑戰賽 #波肥告訴我
1:20 PM ∙ Aug 5, 2019
10Likes1Retweet
Twitter avatar for @rollr76518
陳涵宇 @rollr76518
@handkid map 就是地圖, flatMap 就是平的地圖。(我怎麼把喬喬的對白搶走了呢)
2:52 PM ∙ Aug 5, 2019
Twitter avatar for @yllan
宇宙漂流井底之蛙🐸 @yllan
@handkid 所有的map可以做到的,flatMap都可以。flatMap才是運算的基石,flatMap的能力比map強大,flatMap萬歲,map只算語法糖! #flatMap邪教 #monad傳教士
6:34 AM ∙ Aug 6, 2019
Twitter avatar for @yllan
宇宙漂流井底之蛙🐸 @yllan
@handkid 只要知道其實 map(f) 就是 flatMap(g(f)) 就可以嘍!f是任意function,g是?
1:18 PM ∙ Aug 6, 2019
Twitter avatar for @yllan
宇宙漂流井底之蛙🐸 @yllan
@handkid 😅 g是那個type的constructor。 例如對array來說,g就是 {[$0]} 對optional來說,g就是{.some($0)}
3:40 PM ∙ Aug 6, 2019

這串還沒完。

Twitter avatar for @yllan
宇宙漂流井底之蛙🐸 @yllan
颱風天停辦cocoaheads。那我就順勢接續前幾天的話題,flatMap比map強大,因為map能做的,flatMap都能做。證明就是用flatMap來實作map。 習題:有沒有人要挑戰用flatMap來實作filter?
9:14 AM ∙ Aug 8, 2019
9Likes1Retweet
Twitter avatar for @yllan
宇宙漂流井底之蛙🐸 @yllan
正解!透過這個練習希望給大家一些insight,某些function其實只是別的function的特例。 剛剛別推有提到reduce(fold),其實這是sequence(list)的最核心的function。你可以用reduce實作list上所有其他的function。其實也就是對應到數學歸納法。 https://t.co/0Q0PGvN52y
Twitter avatar for @PofatTseng
Pofat @PofatTseng
@yllan @thecat @ethanhuang13 @handkid flatMap { let c = g($0) return condition(c) ? c : nil } == filter(condition) g() == constructor of certain type 對嗎?
1:33 PM ∙ Aug 8, 2019
16Likes3Retweets

SwiftUI 的 AnyView 是怎麼做到 type erased?

雖然目前還沒有解答,但還是有趣的問題。

Twitter avatar for @nalydadad
陳俊達 @nalydadad
這問題困擾我一整天了,求救
stackoverflow.comHow to implement a type erased struct like AnyView in SwiftUI?I’m curious about the default implementation of AnyView in SwiftUI. How to put structs with different generic types into a protocol array? For example: let a = AnyView(Text(“hello”)) let b = AnyV...
5:43 PM ∙ Aug 6, 2019
Twitter avatar for @nalydadad
陳俊達 @nalydadad
@ethanhuang13 可以說是 Both? AnyView 實作應該就是為了 type-erased,但我所知道的 type-erase 方式就是實作一個 Generic Type 為 View protocol 的 struct(暫時叫它 SomeView<T: View>),但不同 Generic Type 的 SomeView 不能塞進 [SomeView],但 AnyView 可以。
2:05 AM ∙ Aug 7, 2019

輕鬆一下

沒有人規定笑話只能放一個,所以我就盡量放~~~

WWDC 影片太多看不完啦

要點進去看動畫。

Twitter avatar for @yermakavets
Henadz Yermakavets @yermakavets
Watching conference video at x20 speed on YouTube
Twitter avatar for @leesteffen
𝕃𝔼𝔼 @leesteffen
Social media, 2019. https://t.co/N9fgxrxgSa
7:13 PM ∙ Aug 4, 2019
3Likes1Retweet

🐃🐂🐄🐮

Twitter avatar for @AmirSariaslan
Amir Sariaslan @AmirSariaslan
😂5
Image
9:41 AM ∙ Jun 25, 2018
32,128Likes18,198Retweets

只是修個 bug 會有什麼意外嗎?

要點開看影片。

Twitter avatar for @rorypreddy
Rory Preddy🥑 @rorypreddy
Fix one bug... #programming
Image
10:31 PM ∙ Aug 7, 2019
14,738Likes6,230Retweets

搞不定 UIKit 是不是都用這招

Twitter avatar for @ios_memes
A meme page to check while Xcode is indexing files @ios_memes
It’ll be our little secret 🤫0
Image
11:02 AM ∙ Aug 9, 2019
146Likes32Retweets

新七夕故事

一次看懂王母娘娘是在不爽什麼。

內政部小編又撿到武器了。得登入 Facebook 才看得到全部。


以上就是本期的內容。如果你覺得值得,請轉寄或推薦給同事或開發者朋友。有問題或回饋、有想讓 Apple/iOS 開發者知道的資訊,包括文章、開源專案、社群活動等等請直接回覆電子報即可。

Share this post

開發者週報 #2

www.ethanhuang13.com
Comments
TopNewCommunity

No posts

Ready for more?

© 2023 ethanhuang13
Privacy ∙ Terms ∙ Collection notice
Start WritingGet the app
Substack is the home for great writing