weak self
By 一三、波肥、喬喬
weak selfJan 19, 2020
47: 好,錄了!工程師與 PM 圍繞 WWDC20 開展的對話
一三找了 PM 同事、也是忠實聽眾的 @Chrisyeh612 來錄音。
這集長達 82 分鐘但聊得很輕鬆,可以慢慢聽。有把章節標記切好切滿。
這是我們第一次採用單麥克風雙人訪談的方式錄音,有敲到桌子的聲音,請見諒。
{ 完整節目筆記 https://weakself.dev/episodes/47 }
本集內容- 開場:居然在上班時間錄 podcast
- iOS PM 怎麼樣吸收 iOS 新知?
- 兩大傷害:送審與 IAP。常常要與太太交手
- WWDC20 印象最深:隱私權政策
- 很多知識還是來自工程師
- 「聽 weak self 對我來說是很療癒的事情」
- PM 怎麼把 iOS 新功能排進專案中—以 Widget 為例
- Android Widget
- 被 Apple 牽著走而做新功能—從 Sign In with Apple 到 App Clips。一開始是被逼著上車,好不容易跟上車之後卻覺得舒服
- 從 app 為主到使用場景為主
- 重點不在 Apple Silicon 本身—使用者將會期待 iOS App 可以跑在 Mac 上
- Universal Purchases
- SwiftUI 跟 Apple 的佈局
- iPad vs Mac
- 推同事入坑 SwiftUI
- 對話
- 總結
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
46: 推你入坑 SwiftUI 不後悔
好,寫了!
{ 完整節目筆記 https://weakself.dev/episodes/46 }
Last year, it felt like I was experimenting with SwiftUI. This year, it feels like I’m building a real app. - MengTo- 13 不想錄音,想去寫 SwiftUI
- 今天來傳教的
- 之前曾說過寫 iOS 寫到膩,主要就是對 UIKit 感到厭煩
- 去年的 SwiftUI 坑太多,沒有實際用途
- 今年完成度很高,很好玩。很久沒有這麼「快樂」了(這不是反串)
- 所見即所得的 UI / app 開發
- 所有 Apple 平台都可以用
- Xcode 12 快很多:code completion、preview update cycle
- 從 Preview 可以很容易變更外觀
- 直接跑在裝置上的 Preview,可以拔起來去拿給同事看。甚至可以把幾乎整個 app 跑起來
- LazyV/HStack、OutlineGroup 等可以建出比較複雜但輕快的 UI
- 連 App 也可以是一個 struct。整個 app 的主要 UI 架構可以幾行 code 搞定(例如 TabView 包什麼東西)
- 甚至還有 DocumentApp 這種東西,直接幫你包好
- 程式碼少很多改很快,這真的是未來
- 需要 iOS 13+,建議 iOS 14
- 需要 Xcode 12
- 跟設計師研究怎麼樣使用 Xcode SwiftUI Library 建立一些 design guidline 或 components
- 自己找 side project 亂試
- 試試看用 SwiftUI 重刻既有的 UI
- 寫 Widget
- 寫 App Clips,不要拿原有的 UI,寫個新的
- 寫 watch app
- 不一定要 Xcode,Swift Playground 也可以寫(偽 Mac 桌面)
- 找某些 UIKit 畫面嵌入 SwiftUI(UIHostingController),或是 SwiftUI 不夠用的時候嵌入 UIKit(UIViewRepresentable)
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
45: iOS 14 主畫面帶來 App 存在感危機!
如果 App 不在主畫面,這個 App 還存在嗎?
{ 完整節目筆記 https://weakself.dev/episodes/45 }
- iOS 14 可以設定 app 一下載就放到 App Library,不留在主畫面
- Widget 可以想成是內容會變的大型 app icon
- iPadOS 14 的主畫面不像 iOS 變得那麼多。沒有 App Library、Widget 不能與 app icon 混排,更像 macOS
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
44: 隱私流程改到你會怕
解讀 Apple 隱私哲學的五根四大柱子,兩位主持人一致認同 WWDC20 必看 session。
{ 完整節目筆記 https://weakself.dev/episodes/44 }
Privacy- On-device processing, data minimization, serurity protections, transparency and control
- 強烈推薦去看 WWDC20: Build trust through better privacy
- iPlayground 2018 zonble: 那些年被蘋果 Ban 掉的 API、投影片
- AppTrackingTransparency framework
- Apple 平台安全性
- User Privacy and Data Use
- SKAdNetwork
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
43: MetricKit—App 怎麼死的不用通靈啦
MetricKit 是一個討論度不高,但相當實用的東西。開發者不用做任何事情,就可以在 Xcode 11 Organizer 看到整理好的電力與效能的數據。如果想要搜集個別裝置的資料,就可以運用 MetricKit。而且從 Xcode 12 開始這些資料又更多了。
另外,在節目中有一點來不及提到:App Store Connect 最近新增許多 MetricKit 相關的 API endpoints。詳情見官網。
{ 完整節目筆記 https://weakself.dev/episodes/43 }
- MetricKit
- 25: 難道公司發大財了!?App Launch Time 加速面面觀
- WWDC20: What’s new in MetricKit
- WWDC20: Explore logging in Swift
- WWDC18: Measuring Performance Using Logging
- WWDC20: Why is my app getting killed?
- MXBackgroundExitData
- WWDC20: Expanding automation with the App Store Connect API
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
42: App Clips—應用程式切片是迷你 App 嗎?
這集聊應用程式切片——App Clips。13 講話有點卡,所以我們盡量把資訊補充在下面。
{ 完整節目筆記 https://weakself.dev/episodes/42 }
App Clips are not a trojan horse for your app, they should have value on their own.- App Clip 是一種依照需求立刻下載的小 app,整包有 10 MB 限制
- 在商店或實體地點掃描 QR code、App Clip code、NFC tag、或系統建議。會先顯示 App Clip 卡片,使用者再按打開按鈕來叫出真正的 App Clip
- 卡片又稱 App Clip experience。要在 App Store Connect 設定顯示的資訊、按鈕的類型(打開、播放等)
- 也可以在網站(Smart Banner)、訊息直接叫出 App Clip
- 上述所有的進入點都會用 URL(NSUserActivity)的形式傳入 App Clip,你才知道要導到哪個畫面或資訊
- App Clip code 是同心圓圖案,可用相機掃描來開啟 App Clip 卡片。製作工具還未推出
- 下載主 app 的時候 App Clip 會自動被刪除。開發者上傳時主 app 與 App Clip 要一起打包送審,但在使用者裝置上兩者不會同時存在
- API 跟一般 app 都一樣,只是部分使用者資料拿不到(例如 HealthKit)。沒有限定要用 SwiftUI 才能開發
- 只支援 iPhone
- 請求 Location 的權限有簡化版流程。如果在實體商店使用的話,可以用來加強判斷使用者有沒有在現場能取得服務
- App Clip 不能被 deep linking 打開、不能包含其他 App Extension
- 如果一段時間沒用的話系統會自動把 App Clip 刪掉,包括 Keychain 資料
- 相機、麥克風、藍牙權限可以移轉到主 app
- 打算移到主 app 的資料可以放在 share container
- Apple 建議用 SIWA、Apple Pay 來加快使用者流程
- 推送通知可以直接用,在 Info.plist 可以設定 ephemeral,這樣就不需要問通知權限。可以在 8 小時內發送通知,最多可以要求延長到一週
- StoreKit 有新的 SKOverlay API,適合轉換到安裝主 app。Apple 希望你讓使用者做完重要事情以後,再呈現這個轉換
- App Clip 的設計方向:越快越好、在當下脈絡可完成的最重要事情、很多次要 UI 跟設定都不用、一定要登入的話用 SIWA、付款用 Apple Pay
- 白牌應用開發商可以幫商家開發 App Clip,體驗會稍有不同
- Human Interface Guidlines - App Clips
- WWDC20: Explore app clips
- WWDC20: Configure and link your app clips
- WWDC20: Streamline your app clip
- WWDC20: Design great app clips
- WWDC20: Create app clips for other businesses
- WWDC20: What’s new with in-app purchase
- SKOverlay
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
41: Widgets are not mini apps, widgets are not mini apps, widgets are not mini apps
全新的 Widget 跟你想像的不一樣!使用者要聽、iOS 工程師要聽,設計師跟 PM 更要聽!
留言
{ 完整節目筆記 https://weakself.dev/episodes/41 }
- 更新的限制:更新原理跟 ClockKit 一樣,也就是 Apple Watch 錶面的複雜功能(Complications)。即使你設定為每次讀到最後一筆資料就啟動更新,或是狂發 push,系統還是會限制更新頻率
Yes. For example, if you return one entry with timelineReloadPolicy.after, and you make the “after” date like 1 minute from now, 60 times in one hour, you will run out of reloads. ”You don’t wanna do anything crazy.” - @roczhang9673
- 畫面的限制:2x2、4x2、4x4 三種尺寸(相對於 app icons)
- 操作的限制:只能單點打開 app,不能滑動。2x2 還不能區分不同區塊要打開不同連結
- 效能上的優勢:利用 SwiftUI 的特性讓畫面可以在顯示的瞬間讀取並建構完成,而不像以前每個 widget 都要做大量即時運算
- Human Interface Guidlines - Widgets
- WWDC20: Design great widgets
- WWDC20: Design for intelligence: Apps, evolved
- WWDC20: Meet WidgetKit
- WWDC20: Build SwiftUI views for widgets
- WWDC20: Widgets Code-along, part 1: The adventure begins
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
40: Apple Silicon
WWDC20 最大重點 Mac 要遷移到自家晶片了。對於開發者的影響是什麼?
{ 完整節目筆記 https://weakself.dev/episodes/40 }
- WWDC20: Port your Mac app to Apple Silicon
- WWDC20: iPad and iPhone apps on Apple Silicon Macs
- WWDC20: Explore the new system architecture of Apple Silicon Macs
- The Talk Show Remote From WWDC 2020, With Craig Federighi and Greg Joswiak
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
39: 第三季弱勢回歸!先來聊聊 WWDC20 印象
weak self 第三季弱勢回歸!這季我們學習 WWDC 的影片形式,會用小片段的方式推出,打破每週最多一集的節奏。為了節省後製成本也把音樂省掉了哈。
首先來聊聊三位主持人對於 WWDC20 的整體印象。
{ 完整節目筆記 https://weakself.dev/episodes/39 }
更多 weak self- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
38: 一直砍扣一直爽
本集成分:
- #買了指數👉65
- #傷害指數👉-8000
- #雞湯指數👉60
{ 完整節目筆記 https://weakself.dev/episodes/38 }
一直砍扣一直爽- Swift @available(*, deprecated/unavailable)(除了 type 跟 func 已外,enum 可以 case by case)
- 善用 Find Call Hierarchy。預設快速鍵是 Cmd + Ctrl + Shift + H(我太常用了所以把它改成 Cmd + H)
- 《Working Effectively with Legacy Code : 管理、修改、重構遺留程式碼的藝術》
- 三次元螞蟻-宇宙兄弟
- 《走出軟體工場》
- 《我在底層的失控人生》
- 那些最常在 Stack Overflow 被提到的 30 本工程師必備書籍
- WWDC
- 做做 side project
- 指數
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
37: 欸,這個壞掉了之 Log 的那些事、IAP 的傷害
本集由傷害擔當與雞湯擔當來討論技術擔當的工作。
{ 完整節目筆記 https://weakself.dev/episodes/37 }
關於 Log 的那些事 IAP 的傷害 Do not call the App Store server verifyReceipt endpoint from your app. You can’t build a trusted connection between a user’s device and the App Store directly, because you don’t control either end of that connection, which makes it susceptible to a man-in-the-middle attack. - Validating Receipts with the App Store欸,這個壞掉了
- 裝置、系統版本、App 版本缺一不可
- 可以回去聽 26: iOS 開發生平大坑之 DateFormatter
- 一三傷害指數:4
- 喬喬雞湯指數:3
- 波肥買了指數:N/A
- iOS 開發者職業傷害大全
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
36: Strong Wife 跟 WWDC 回顧加預測
某人的老婆提議要錄工程師太太單元。WWDC。Facebook SDK 爆炸事件。
{ 完整節目筆記 https://weakself.dev/episodes/36 }
Strong Wife- 不保證會出啦哈哈
- Apple Developer App
- weak self 0: 如果你想要浪費一個人的暑假
- 回顧 WWDC19 發表的新東西:SwiftUI、Catalyst、UICollectionView Compositional Layout、Sign In with Apple、dyld3、Dark Mode、拔掉 3D Touch Peek & Pop 改 Context Menus
- dyld3 在 iOS13 早期版本的 crash
- No Overview Available.
- WWDC20 預測內容:SwiftUI 支援更多 UI 元件、Xcode on iPad、macOS on ARM
- Crash 的經過
- 一三寫的 Facebook Auth 推文、Gist
- @lihenghsu 的版本
- Facebook Platform Policy 8.2
- FB SDK Best Practices for GDPR Compliance
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
35: 勞動節特輯之人生不一定有答案
三位主持人合體了!今天的遊戲規則是名詞都要翻成中文。
{ 完整節目筆記 https://weakself.dev/episodes/35 }
這個也不會,那個也不會- 工程師一定往管理職發展嗎
- 太基本的東西也要教育訓練嗎
- 保密
- 寄信(副本給執行長的那位仁兄)
- 開會到底在幹嘛
- 怎麼保持能量
- 成為諮商師之前要先當案主
- 你的心理安全網建好了嗎
- 收尾收不掉🤪
- 請多多回饋意見🙏
- 沒在管的剪輯✂️
- 用 HRV 來衡量身心壓力
- Apple Watch 買起來?
- HRV 科普小教室—心率變異與 Apple Watch
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
34: 心動投資法之蘋果的股票可不可以買
身為果粉的你如何抑制蘋果新產品的購物衝動?把這筆錢拿來投資怎麼樣?
{ 完整節目筆記 https://weakself.dev/episodes/34 }
蘋果的股票可不可以買- iBook G4
- iPod Shuffle 1
- iPhon SE 體驗影片:MKBHD、钟文泽
不推薦大家衝動購物、盲目投資。投資有賺有賠,投資前請詳閱公開說明書。
更多 weak self- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
33: 喬喬沒賣藥電台:iPhone SE
「謝謝 iPhone 11 Pro 大哥,你的晶片果然厲害。」喬喬回來了!這集我們聊熱騰騰的 iPhone SE。
{ 完整節目筆記 https://weakself.dev/episodes/33 }
iPhone SE 謝謝 iPhone 11 Pro 大哥,你的晶片果然厲害。(台灣官網)iPhone 11 Pro called. It wants its chip back.(美國官網)
竟然用上同一晶片,iPhone 11 Pro 表示抗議。(香港官網)
咱们这颗芯,与 iPhone 11 Pro 大哥平起平坐。(中國官網) 什麼樣的語言水準才會寫在履歷上
如果是應徵 iOS 工程師的話,Objective-C 或 Swift 至少要會一項吧。
更多 weak self- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
32: 本集節目要 @audreyt 唐鳳、Pair Programming、Apple 與 Google 合作
為什麼健保快易通 iOS App 的 Logo 扁掉了,怎麼修?AirPlay 不是只有鏡像模式,但大家都搞不清楚?13 分享 Pair Programming 經驗。Apple 與 Google 攜手合作。
{ 完整節目筆記 https://weakself.dev/episodes/32 }
健保快易通 iOS App 的 Logo 扁掉了- @audreyt
- 全民健保行動快易通,App Store 截圖跟啟動畫面的圖扁掉了
- 一個推文示範實作方式
- 要用 Launch Screen。App Store 6/30 以後就不再允許 Launch Image
- UIImageView contentMode 常用的方式有 .aspectFit 與 .aspectFill
- 不要切到影像的話,要用 resizeAspect,如果跟螢幕比例不同的話,會有留邊
- 要填滿畫面的話,要用 resizeAspectFill,如果跟螢幕比例不同的話,會切掉部分
- HIG: Video 有很好的範例
- AirPlay Mirror(螢幕鏡像輸出) 不完全等於 AirPlay,但是 Apple 沒有講得很清楚,使用者很容易搞混
- 控制中心第一層可以打開 AirPlay Mirror
- 要使用非 Mirror 的 AirPlay,則是要按控制中心右上角的媒體控制,再選擇要投出的裝置
- 如果是播放串流影片的話,從 app 裡面放 MPVolumeView 的 route button,或是 iOS 11+ 的 AVRoutePickerView,讓使用者選擇要投出的裝置,就不會是鏡像模式
- FairPlay DRM 會阻止鏡像模式,只會有一個畫面播放影片
iOS 有內建 Screen Sharing API。WWDC18: Live Screen Broadcast with ReplayKit,Google Meet、Zoom、Twitch、FB Messenger 等都支援
Apple 跟 Google 合作推出傳染接觸追蹤的系統框架 結尾又聊到遊戲去了- FF7 Remake
- 惡靈古堡三
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
31: 真的不是聊動森的 Podcast
一三跟波肥來聊 iOS 開發圈的愚人節趣事。然後還是有聊到一些遊戲。
{ 完整節目筆記 https://weakself.dev/episodes/31 }
真的不是聊動森Podcast 搜尋引擎 Listen Notes,搜尋動森會找到 weak self 😂
惡靈古堡的起源故事CAPCOM 惡靈古堡系列的起源故事、三上真司、神谷英樹(維基百科)
企業都是會垮的- The Omni Group
- Brent Simmons
NetNewsWire
Vesper iOS App
Vesper Sync Diary
Looking for Work & Overwhelmed in a Good Way
- [假] John Sundell 的 Introducing Objective-C UI
- Jordan Rose
[真] 去年的 Source Is View,靈感來自 Baba Is You
[真] 今年的 Swift on Mac OS 9 - Paul Hudson
開發者在哪裡?Spot the Swifty 文章、全圖
Erica Sadun in dotSwift 2020 - [真] Swift 的 Emoji 可以相加
- Xcode 11.0~11.3.1: Crashes in compiler optimized code
- Xcode 11.4: UILabels 神秘的糾纏
- 呼叫雞哥,還是難哥?
- 也歡迎訂閱«13的開發者週報»
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- Twitter @weak_self
30: 開發圈近況與遊戲的隨性聊
這集由一三跟波肥完全沒準備、開麥就裸聊,效果意外地不錯!
{ 完整節目筆記 https://weakself.dev/episodes/30 }
開場閒聊:什麼都底累了- Nintendo Direct Mini 3.26.20
- Star Wars Episode I Racer 移植到 Switch 與 PS4
- Fabric shutdown extended to May 4, 2020
- App Store Deadline for App Updates has Been Extended
- Google I/O 2020 取消
- WWDC20 全線上化舉辦
- try! Swift Tokyo 2020 取消
- 也可以參考 S2E23: 在家工作!WFH 時怎麼樣才不會 WTF
- 波肥的儀式感(工作與生活狀態切換)的實用建議
- 一不小心就可以玩上百小時,所以從錢的角度來說不貴
- 一機多人一島、暫時沒有存檔備份跟轉移的方案
- 與真實生活步調的高度模擬
- iPad Pro LiDAR 效果影片:一、二、三
- 官方 Mesaure App 說明: Use the LiDAR Scanner…
- @shu223:沒有 LiDAR 專屬 API(日文)
- NoteBookCheck.net: The Apple A12Z Bionic SoC is just a renamed A12X with an enabled GPU core
- Relax, Apple disabling a GPU core in A12X only to enable it in A12Z is quite common
- 集合啦!動物森友會(你要在動森裡面錄什麼…?)
- Resident Evil 3 Remake (4/3,冷飯重炒永遠香)
- FF7 Remake (4/10 發售,不一樣的戰鬥系統可以體驗看看)
- TLoU2 (5/29 請假啦!)
- 對馬戰鬼(對馬幽魂,6/26)
29: 來做 Side Project 系列之好用的搜尋功能
搜尋是 app 常有的功能。本集來聊怎麼把搜尋的體驗做好一些呢?Bonus 則是探討如何讓 app 支援 iOS Spotlight Search,提高使用者回流的機會。
{ 完整節目筆記 https://weakself.dev/episodes/29 }
開場閒聊做 UI 的另類方法聊了 13 在嘗試用 userflow unit tests + SwiftUI preview 的 UI 另類開發方式。
搜尋外部資料很多 app 有資料搜尋的功能,大致上可以分成搜尋外部資料、過濾內部資料兩種。先說第一種:
- 要打遠端 API 或從區網取得資料
- 限制 query 頻率,不能隨打即找
- 考慮不可控的回應時間
- 捨棄已經不符合目前搜尋條件的結果
- API 可以提供搜尋建議
- Debounce vs throttle
- 直接讀取裝置上的資料庫
- 效能可控,幾乎可以一邊打字一邊顯示結果
也是要測量
- 沒有 API,所以自己保留搜尋條件的歷史
保留搜尋條件變成資料入口,曾是 Evernote 的特色之一
要能夠清除搜尋歷史
更好的話是讓使用者能關掉這個功能,因為不是每個人都喜歡留下記錄
如果是靜態資料,可以 cache 搜尋結果
- 通常搜尋結果會是列表,所以可能是 UITableView 放在 UINavigationController 裡面
- 用 UISearchController,是把搜尋框「藏」在 navigation bar,往下捲動時搜尋框會看不到。如果搜尋功能真的很少用到的話還算可以考慮。效果可以參考系統設定的搜尋功
- 如果搜尋是重要入口的話,還是傳統方法把 UISearchBar 放在 navigationItem.titleView 比較簡單實際,bug 也比較少…
除了 app 內的搜尋以外,也可以支援 iOS 的搜尋。有幾個方法:
- 用 NSUserActivity 把使用者操作過的動作,或是點開過的項目加到 index
這個有做沒有壞處,還可以順便支援 Handoff 跟 Siri Shortcuts 等等
- 用 Core Spotlight framework 批次操作
CS 的 index 是 private、on-device
甚至可以做成 app extension
甚至可以拿 CSSearchQuery 來做自己 app 的搜尋引擎。也就是 app 內與外都共用同一個 index 跟搜尋引擎(但我沒有這樣做過)
- 如果有內容相通的網站,可以寫 web markup 來支援 Applebot 爬蟲
適用於公開資料
支援 Twitter Cards 與 Facebook 的 App Links 標準
如果網站想要導流到 app 的話,可以搭配 Universal Links 和 Smart Banner 一起規劃
App Search API Validation Tool
詳情都可以查看 App Search Programming Guide。但是這份文件已經很久沒更新,放在 Archive。
講起來好像很複雜,但是加個 NSUserActivity 沒有幾行程式碼。
更多 weak self- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
28: 來做 Side Project 系列之誰能比我鍵
這集「來做 Side Project」系列來講講鍵盤跟文字輸入的一些基本東西。Apple 真的有很多跟文字輸入還有鍵盤的 API 呢。
{ 本週節目筆記較長,完整節目筆記 https://weakself.dev/episodes/28 }
歡迎收聽「我就弱!」- 「我們弱」彩蛋請上我們的 Twitter
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
27: 來做 Side Project 系列之不要剛見面就要個資啊
全新企劃!由 13 負責主持的「來做 Side Project」系列探討 iOS 工程師自己做 app 時可以注意的細節。
{ 完整節目筆記 https://weakself.dev/episodes/27 }
About Page- 版本號
- 官網
- SNS
- App Store 連結
- 回饋的表單或寄信機制
MFMailComposeViewController
- 開發者或工作室的聯絡資訊(看你怎麼經營)
- 開源專案的話,專案資訊與連結
- 有使用到的軟體套件的授權
- 隱私權政策
- 可以用 SwiftUI 或 Storyboard 簡單地做
- 可以用 iTunes API 把使用者評分人數抓下來
- 隱私權頁面本來就要在上架 App Store 提供
- 隱私權政策產生器 TermsFeed
- 早期 Android 更沒在管
- 權限不要第一次啟動 app 就要,尤其是通知
- iOS 12+ 可使用 .provisional 的通知
- Apple 自己的服務都違反 guideline
- 放 behavior log 之前先想清楚你要找什麼
- 小扯題 GDPR
- 提供 EULA
- 要有使用者回報與封鎖機制
- Side project 還是不要做 UGC 好了
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
26: iOS 開發生平大坑之 DateFormatter
為了讓節目內容兼具技術與閒聊,我們討論著 iOS 開發時遇到的坑。這集就由 13 先講與 DateFormatter 的不解之緣。
{ 完整節目筆記 https://weakself.dev/episodes/26 }
第一次:NSDateFormatter init 的坑以前官方文件有寫說 [[NSDateFormatter alloc]init] 是 CPU expansive task,不過現在這句話找不到了。只有在 StackOverflow 上還有記錄。
論 iOS App Performance OptimizationQ. 如何大幅提升 compile time 效率?
A. 買最新的 Apple 電腦
Q. 如何大幅提升 runtime 效率?
A. 等使用者買最新的 Apple 裝置
結論:
人們說「能靠花錢可以解決的都不是難事」,是不是沒有很難?🤪🤪🤪
@ethanhuang13
第二次:DateFormatter 的 Calendar 坑 If unspecified, the logical calendar for the current user is used. - DateFormatter.calendar
如果沒有指定的話, DateFormatter 就會使用 系統設定 > 一般 > 語言與地區 > 曆法 上的設定,除了西曆以外,還有日本曆、佛曆可以選。
Calendar 選 Gregorian 跟 ISO8061 時,yearForWeekOfYear 算法不一樣。
第三次:DateFormatter 真的炸掉了String 轉 Date 是 nil,奇怪咧!?
首先排除可能性:
- App 刪掉重裝過
- iOS 升級到最新版
- 系統的曆法設定是西曆,或是 DateFormatter 有指定 calendar
- 系統時間沒有亂調
- DateFormatter 不知什麼原因炸掉了
最後處理方法:去找使用者借裝置 debug
喬喬 Bonus:寫 Android 也懷疑人生- 喬喬經驗分享
- 找使用者 debug
如果要使用 ISO8601 Date 的話,iOS 10+ 推薦使用 ISO8601DateFormatter。
波肥 Bonus: 也是 DateFormatter- DateFormatter 的 threading issue
- How iOS alloc and free
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
25: 難道公司發大財了!?App Launch Time 加速面面觀
這集由波肥與喬喬聊聊:
- 為什麼要加速 App Launch Time?
- 什麼時候做?
- 以及怎麼做?
- 庫存已久的題目一次補完
{ 完整節目筆記 https://weakself.dev/episodes/25 }
什麼時候做 App Launch Time 加速?公司有在賺錢的時候
App Launch 的三個階段- Pre-main: Loading (MachO + dylib) / Rebase & Binding / ObjC Setup / Initializer
- Main: App 的入口
- Post-main
- Pre-main 提到的笑話
- 由 @UIApplication 做完全部工作了
- 寫自己的 main.swift (程式碼)
- Pre-main
Loading: 減少 App size;減少 dylib 數目 (merge pods); 或者變成 statically linked pods
Rebase/Binding: iOS 13 幫你用 dyld3 做好 cache 了
Objc setup: 少點 ObjC code;少點 Category
Initializer: 盡量用 +initialize 取代 +load
- Post-main: 少做事,多 lazy,盡量平行化處理
- 掃瞄沒用到 ObjC selector 的 script
- Xcode scheme 新增 env variable 可取得 pre-main 各時間: DYLD_PRINT_STATISTICS = 1 或 DYLD_PRINT_STATISTICS_DETAILS = 1
- 合併 Pods 的 plugin
- Pods 改 statically linked (Podfile example)
- MetricKit 的介紹文章 與 WWDC session
- 在用戶端測量 pre-main 所花時間的程式碼
- 抖音的重新排序 binary 方案
- FB 的 binary layout optimize
- 關於此技術的其它相關評價
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
24: 你也是薪水小倫嗎?上班族如何利用上班時間精進程式功力
喬喬的雞湯賣藥電台再出發。
下班之後無心無力或沒時間加強技能,那可以在上班時間合理合法地學習嗎?
再問,怎樣搞定你的 PM,或說同事之間怎麼做人處事才好相處?
{ 完整節目筆記 https://weakself.dev/episodes/24 }
薪水小倫- Meme: 編譯太久滑一下推特,不小心就滑出去了
- 學習怎樣偷時間跟加速:縮短操作指令、IDE、打字時間、把重複的作業給自動化等等
- Xcode 小技巧:Control + Opt + Cmd + F => Fix All。用來自動完成 Swift switch cases 很方便
- 把工作內容會用到的工具跟流程、看起來很眼熟的名詞,其背後的原理都弄熟
- 寫一些內部的工具、library
- 只會用 code 寫 UI 的人可以試試 Storyboard,反之亦然
- 練習讀程式碼的鑑賞力
- 利用既有知識來輔助學習新知識。幫自己搭梯子,降低學習曲線
- 透過寫作來學習組織知識架構
- 加強英文,讀官方文件算是很實用的路線
- 怎樣搞定你的 PM?其實 PM 不好當。要懂 business domain、tech knowledge…
- 整理出「說人話」的文件給同事們參考
- 有問題及早回報。東西做不出來沒關係,不要最後一天才說
- 菜鳥工程師必修的 30 堂溝通課 - 工程師如何與 PM 溝通
- Developing Strong Product Managers
- 從入門到卓越,產品經理技能檢核表與職涯發展路徑
- 好的產品經理,該有哪些核心能力
- 【PM夥伴攻略】如何跟工程師合作?
- PM與UX設計師間的互動血淚史!改變從不是一蹴可幾
- 《Code Craft》
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
23: 在家工作!WFH 時怎麼樣才不會 WTF
居家隔離?在家工作?聊聊遠端工作的利與弊。
{ 完整節目筆記 https://weakself.dev/episodes/23 }
2020 iOS 工程師展望與規劃其實跟往年差不多規律。
要學 Objective-C 的話:
- 可以從長輩的教材開始讀起
如果要學 Flutter 的話:
- 請回去聽 weak self S1E12
真的要學 SwiftUI 的話:
- 請回去聽 weak self S1E16
- SwiftUI Learning Curve in 2019
- 一些工具與流程可參考 InfuseAI Member Handbook
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
22: 喬喬賣藥電台:上班族業績與工程師技術債+如何跟強者同事相處+玻璃心同事
第二季開始啦!喬喬的賣藥電台,跟 13 聊了三個題目。
{ 完整節目筆記 https://weakself.dev/episodes/22 }
工程師該不該放心大膽創造技術債? 你好,我是 weak self 的聽眾,也是工程師幹話的忠實讀者。想請問 weak self 對⟪工程師應該放心大膽地創造技術負債⟫這篇文章的看法? 弱弱的我如何跟強者同事相處的指南? 可以來一集,弱弱的我如何跟強者同事相處的指南嗎?心理素質不夠強,連問問題都怕怕的 玻璃心同事? 跟同事的回饋或建議,彼此之間的不舒服? 更多 weak self
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
21: @escaping vs @nonescaping
在某個假設的平行時空當中,這集 podcast 會是在討論肉身的 @escaping…
{ 完整節目筆記 https://weakself.dev/episodes/21 }
第一季統計- 前五大熱門單集
12: 販售焦慮,Mobile 工程師能不學 Flutter 嗎?
14: 資深被資遣工程師
0: 如果你想要浪費一個人的暑假
1: Swift API 設計之 Value Type 與 Reference Type
5: 這裡沒有心靈雞湯配大餅
- 總播放次數 24,000+
- 平均單集播放次數 1,100+
- Twitter 追蹤者 930+
- 聽眾捐款 $8,200+
- 被垃圾車打斷次數 5+
- 錄音檔損毀次數 6+
- 三人分頭製作節目,錄音人數可以兩人起跳,希望能夠擴大多元性跟庫存彈性、降低錄音壞掉的風險,穩定每週更新
- 13 的節目:偏開發圈時事、Apple 動向
- 波肥的節目:挑戰賽、技術導向
- 喬喬的節目:雞湯大師、賣藥電台(歡迎來信 weakself.dev@gmail.com)、接案經驗
- 會有名詞解釋專頁
- 1/27 春節休息一次
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
20: 幕後花絮之 1/11 回家投票
請回家投票!各位投票的結果會影響未來的節目內容。沒有錯,我們就是因為這樣來錄了幕後花絮。
{ 完整節目筆記 https://weakself.dev/episodes/20 }
回家投票本節目有提到的一些網站或資料。
- 個資風暴:劍橋分析事件
- 報導者風向戰爭與它的推手專題
打不死的內容農場──揭開「密訊」背後操盤手和中國因素
LINE群組的假訊息從哪來?跨國調查,追出內容農場「直銷」產業鏈
輸出台灣政壇勝選方程式,他到東南亞「賣策略」:我是測試民主的病毒
寫手帶風向不稀奇:AI產文、侵入私人LINE群,輿論軍火商已全面升級
專訪前「劍橋分析」業務總監:只要臉書的生意繼續,民主就有危機
- 台灣事實查核中心
- 島民衛星
除了難搶的鐵路外現在有三家客運加入,且皆在半價優惠中,沒搶到火車票的東部居民可多加利用,三家客運輪開 24 小時皆有車啊!
- 統聯客運
- 台北客運
- 首都客運
- 聽眾信箱 weakself.dev@gmail.com
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
19: 年度最佳 bug
weak self 與小綠的年末大亂聊。你一定會在某些片段找到共鳴。
{ 完整節目筆記 https://weakself.dev/episodes/19 }
段落一- MRC、LLVM
- @IBOutlet/@IBAction crash,可用 IBAnalyzer 解
- frame -> Auto Layout
- Safe Area and iPhone X
- Review Team 的太太
- Build Time 變長
- 桌機才叫生產力工具,筆電是開會工具
- 頂樓加蓋 vs 透天?
- 花蓮飯店草皮研討會
- 有波肥小裙子的感謝祭
- 太乾都會被自動剪掉
- Watching a model train
- 魔幻冰箱
- Mars 問 Swift dynamic keyword
- 小綠臨時的 #波肥挑戰賽 Swift class 的 instance func vs extension func
- 喔我們回來了
- Sign In with Apple 的正確實作方式?
- 祝新年快樂
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
18: 綠背影的聽力測驗之怎麼害人
在挑戰賽交鋒許久之後,終於把小綠 #greenback 請來 weak self 啦!我們想來聊當 team lead 的一些經驗,這集就先從招聘與面試談起吧。到底 team lead 在❌害✅hire 人的時候會考慮什麼呢?
{ 完整節目筆記 https://weakself.dev/episodes/18 }
最近怎麼這麼累- #greenback 在投影片第 37 頁
- 小綠 refactor 4000 多行的 class
- 歡迎贊助週五大半夜躲在倉庫錄音的 weak self
- 錄音錄到老婆奪門而出
- 其實我們草創的時候就 cue 過 Mars 了
- 履歷怎麼來
- 小綠怎麼看待考演算法
- 會職稱對應的工作經驗
- 錯字會不會是個問題
- 自傳
- 亮點
- 累積手感
- 人格特質:我會想要跟他一起工作嗎?
- 面試雙方都是賭注
- 做點基本功課
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
17: 便宜行事的第二集—我就是那個奇葩同事
我們隨便聊,大家隨便聽~
{ 完整節目筆記 https://weakself.dev/episodes/17 }
遇過的奇葩同事 遇過的奇葩同事🤣 - @GreasoWang Server-Side Swift Server side swift! @marslin_dev try! Swift 注意事項 是誰住在深海的大鳳梨裡 - @joe_trash_talk 講講 try swift 注意事項⚠️ - @GanNaSong- try! Swift Tokyo 官網
- 波肥教你 build Swift source
- Maxed-out 16-inch MacBook Pro: is the upgrade worth it for developers? - @twostraws
我想知道是怎樣的時間管理,可以把工作 + 家庭 + 社群都做得很好 - @hokilaJ 這樣我想聽怎麼兼顧速度品質和價格 XD - @wenwen_1025 派遣工程師 我最近聽說派遣工程師很流行
有沒有iOS界的派遣女王(? - @myread02
- 派遣、約聘、外包、接案
- 個人接案:
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
16: 資深工程師什麼時候才學 SwiftUI 跟 Design Patterns
標題不是一句話,是三個問題。越到冬天我們就來閒聊,輕鬆一下。也歡迎繼續丟雪片般的問題到 @weak_self 來~
{ 完整節目筆記 https://weakself.dev/episodes/16 }
什麼樣才能稱為資深工程師 什麼樣才能稱為資深工程師 - @hanyu_chen_ios什麼時候應該開始學習 SwiftUI 什麼時候應該開始學習SwiftUI - @stevezhou007
- 官方 SwiftUI Tutorials
- 100 days SwiftUI Challenge - Hacking with Swift by Paul Hudson
- Design+Code SwiftUI Course
RxSwift 或 Combine - @ji3g4kami
- SOLID 原則
- Swift 起手式不是寫一堆 protocols,回去複習第 2 集
- RxSwift 一言以蔽之:非同步事件是以時間為 index 的 array,比如 event[第5秒] == .response(data)
- RxSwift 就是 Observer 的 Design Pattern
- 推薦閱讀官方文件
- Design Patterns 文章列表
KKBOX iOS/Mac OS X 基礎開發教材 - 所謂的設計模式
搞笑談軟工 - Patterns
- Design Patterns 書單
輕鬆讀物
深入淺出設計模式 (Head First Design Patterns)
大話設計模式
聖經本
物件導向設計模式-可再利用物件導向軟體之要素 (精裝典藏版) (Design Patterns: Elements of Reusable Object-Oriented Software)
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
15: Code Review 趴吐
上一集聊 Code Review 收到熱烈回響。波子欲罷不能,也來分享一下 TBD(Trunk Based Development),應該在台灣算比較不常見的開發流程與 Code Review 經驗。喬喬請假,涵宇代班。
{ 完整節目筆記 https://weakself.dev/episodes/15 }
你們家 Branching Model Code Review 趴吐 TBD(Trunk Based Development)- 直上 master
- Feature Flag
- 不 merge
- 只有一條線
- phabricator
聽眾 wenwen_1025提問:
想了解 code review 到底要做到多細,如果要 review 到整個 story 的行為是否正確,那等於是團隊大家都要很了解每一個 story 要做的內容以及原本的行為,才有辦法 review 這樣寫對不對,但是這應該會降低不少團隊的產出 16 吋 MacBook Pro 到底有多香- MBP 2018 冰箱機 - Dave Lee
- New 16" MacBook Pro Review: A Developer’s Dream Come True - Kaya Thomas 的 MBP 實測
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self
14: 資深被資遣工程師
休息兩週以後 weak self 強勢回歸,今天我們邀請到在 iOS 社群十分活躍、也是我們的第一位贊助夥伴涵宇。他要跟我們分享他被非自願離職的經驗,以及他在 Code Review 方面的心得。
這集的錄音過程還是不太順利。後半段會是 13 跟涵宇重錄對談,並插入一些波肥跟喬喬的錄音。
{ 完整節目筆記 https://weakself.dev/episodes/14 }
歡迎乾爹涵宇 weak self 開放個人贊助啦- 請見官網贊助說明
被資遣的流程
- 失業的第一天到 公立就業服務機構 登記,基本上那邊會有完整的流程,總共可以領 6 個月。
- 失業後不要馬上就業,要至少失業約 14 天(以勞保紀錄為準),才能請領第一個月的失業補助金。
- 如果有領到第一個月的失業補助金,代表符合失業補助的資格,之後就業後在任意公司只要勞保投保日期滿 90 天,就可以再申請 提前就業獎勵 ,會用沒領完的失業補助金的一半來獎勵,假如你只請領了第一個月,那你的獎勵金就是 (6-1)/2 = 2.5 個月。
- 如果你順利在工作,可以領到工作的薪資,同時又拿到了 3.5 個月的失業補助,這對缺錢的人來說非常有幫助。
- 投保額度跟薪資有正相關,但上限約 45,800,每個月可以請領的失業補助金,是這個數字的 60%,一般的情況下你可以拿到 27,480/月。而有扶養的失業者,每個扶養人頭可以再加 10%,最多 20%。也就是說你若扶養 2 個人,你可以拿到 80%,為 36,640/月。
簡單計算:
- 一般人的 45,800 * 0.6 * 3.5(月) = 92,190
- 扶養一位 45,800 * 0.7 * 3.5(月) = 112,210
- 扶養二位 45,800 * 0.8 * 3.5(月) = 128,240(上限)
(特別強調,3.5 裡的 2.5 要新工作(新投保)後90天才能申請哦)
以上數字只是印象,實際上要依真正請領到的數字為準。
其他還有連續失業等情況,就不註記在這裡了(更多失業給付的資料)。
主菜:跟著涵宇做 Code Review 初次遇到 Code Review 我透過 merge request 跟團隊 merge 了Code Review 怎麼改變我? Code Review 需要哪些支援?
- GitLab CE(Community Edition) 少了2個我覺得關鍵的功能。(Approved 功能及 default template)
- .xcodeproj sort 的功能
- Gitlab merge request template
- Chrome 套件 (GitLab - Tree view for code、Stylus)
甜點:恥力很高的涵宇
- 常常被嗆?
- 順便回答 weak self 提問箱的問題
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
- 贊助 weak self
13: 喬喬 Erasure
又是歡樂的一集!今天聊起 #weakself挑戰賽的 Type Erasure 與 Opaque Return Type。不過,怎麼某人的聲音到後半段就 erased 了!?
{ 完整節目筆記 https://weakself.dev/episodes/13 }
前言- 上一集成為最熱門集數,所以跟新朋友打招呼、解釋一下我們的名稱
- weak self 這個名稱,寫 Swift 或 iOS 工程師一看就知道。但我們其實沒有中文名稱,大家可以幫忙想
- weak self, strong community
- 鐵人賽
iOS Developer Learning Android 系列 by @MarkFlyyyyy
30 天了解 Swift 的 Combine
最高觀看數 bug?
其他整理請見«13的開發者週報»
- xcode-install
PAT 是什麼?看 code
PAT 三不能:
- 不能做為變數型別用
- 不能做為 function 的 return
- 不能放在 Collection 裡
你是忘記還是害怕想起:
PAT 難搞的地方有兩種:
- 有 Self 的 Protocol:Hashable
- 有 associatedtype 的 Protocol:IteratorProtocol
對應的做法:
Opaque Return Type- weakself 的中文名稱是個 Opaque Type (Caller 決定 generic 是什麼)
- Opaque Return Type 則由 Callee 決定 generic 是什麼
- 避免 generiception:
-> C where C.Element == ElementOfResult
= LazyMapSequence>, ElementOfResult>
- 也是對於 Type Erasure 的一種根本性解決手法
- 範例請見:https://gist.github.com/pofat/a411d785e593982868a54e140f48ad8f
抱歉,還無法🤷♂️
更多 weak self- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
12: 販售焦慮,Mobile 工程師能不學 Flutter 嗎?
長輩有交代:「學好程式不用花很多時間啊,只要一輩子就夠了,一輩子很短的。」然後他又補充:「只需要一輩子,不用兩輩子。」
身為 iOS 工程師,這輩子只要懂 iOS 就好嗎?看似寫了一輩子 Mac/iOS 的 @zonble,最近卻拿了一張 Google Flutter GDE。來聽聽他對於 Flutter 這項趨勢的看法。
{ 完整節目筆記 https://weakself.dev/episodes/12 }
長輩我喜歡你啊! 大家好我是 zonble 販售焦慮,iOS 工程師能不學 Flutter 嗎? Flutter 是什麼?打散重組的瀏覽器- 瀏覽器是什麼?
- 為什麼 Flutter 比瀏覽器還快?
- 什麼樣的 apps 適合用 Flutter
- SwiftUI 與 Flutter 的同與異
- 先把 UIKit 給忘了
- 整個 Flutter 就是一顆樹(看這張圖就秒懂:Layouts in Flutter)
- 用 Web 的方式來思考會比較容易
- 喬喬的 Flutter 經驗
- 一定要用 Firebase 嗎?
因為錄音時垃圾車一直來,weak self 考慮開個副牌叫 Garbage Collection 啦🤣
Google 推出 Flutter 的策略- Google 需要從頭到尾自己掌控的框架
- 一定要用 Firebase?
- 目前是 AndroidX 與 Gradle
- iOS 與 Android 工程師容易忘記的點
- 人活活得好好的幹嘛跳出舒適圈
- 人活活得好好的幹嘛去踩坑
- 應該不用擔心 Flutter 被 Google 收掉
- 為未來的節目插旗
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
11: 先 build 得起來再說—Project Catalyst 踩坑記錄
身為一個 code 寫得不好但是踩坑很擅長的工程師,13 當然也沒有錯過試玩 WWDC19 的新玩具之一 Project Catalyst。這集我們會聊一下這項技術對於 Apple 的戰略意義,對於開發者的影響,以及怎麼樣初步上手。既然是踩坑,還沒到寫好 app 上架發大財的程度,所以就是聊好玩的囉。
{ 完整節目筆記 https://weakself.dev/episodes/11 }
補充前一集的內容- 完整筆記請見官網
WWDC18 時發表一項計畫的預覽,內部代號是 Marzipan(一種我沒有吃過的食物)。是用來把 iOS app 移植回 Mac 的方式。他們先做出了 4 個 apps 讓人聞香。
- Home
- Voice Memos
- Stock
- News
Steve Troughton-Smith,就開始研究 Apple 到底把多少 iOS 上的 framework 搬到 Mac 上。他推出一個工具 Marzipanify。
13 的踩坑經驗 從入門到放棄的 BlahkerSafari 13 把 Legacy Extension 給砍了,要支援就要改成用 Safari App Extension。
超好轉的 Ladybug 與 KnilLadybug 是去接 rdar:// 這個 custom URL scheme 幫你開連結到 Open Radar。Knil 則是一個測試 Universal Links 的工具。
打勾勾的心理陷阱與解決套件相依- UIWebView 不能用喔
- Static binary 要重新 build 喔
- 分成兩個 targets 會簡單得多
Mac 特有的 UX
CocoaPods 小技巧 怎樣的專案適合 Project Catalyst 催化劑的戰略意義 歡樂的時光怎麼少了喬喬 更多 weak self- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
10: 喬喬 escaping
本集竟然有人 escape!那我們就順勢來回應與 @escaping 有關的 #weakself挑戰賽吧!為什麼 Swift closure 的 [weak self] 要加中括號呢?weak、unowned 你分得清楚差別嗎?一起來參與挑戰吧。
{ 完整節目筆記 https://weakself.dev/episodes/10 }
weak self 挑戰賽- 小綠的挑戰推文
- 何謂 escaping、nonescaping closure
- 何時用 weak、unowned,或是不用
- 搭配服用的程式範例
- closure 預設會 capture (strong reference) 外部變數
- capture list 會生成一份 copy
- function return 後還會發生的叫做 escaping
- 有機會造成 retain cycle
- Swift 的 reference instance 是個 HeapObject
- HeapObject
- weak reference 會為 instance 建立 side table 用來計算數目
- Swift Ownership Manifesto
- Objective-C 的 ARC 功能如果不是因為創立全新語言 Swift 時追求 memory safety,恐怕從來不會出現。有興趣的朋友可以去聽 The Swift Community Podcast Ep.1。
- closure 生命週期與對象生命周期一致時,使用 unowned
- weak 有較多記憶體消耗
- 要了解程式碼裡大家的生命周期啊
- closure 會捕捉外部使用的變數,有可能造成 retain cycle
- weak 和 unowned 有不同的機制與生命週期
- 沒有 retain cycle 不用 weak / unowned
- weak 有額外的記憶體與性能消耗(可忽略)
- 13 的 Apple #ArcadeReview 連載中
- iPad mini 超適合玩 Apple Arcade 的,又輕又快又平💸
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
9: 帶你親臨 iPlayground 現場
這是 iPlayground 特別篇,也是 weak self 首次「出外景」。我們在活動現場,非常幸運地錄到了會眾與 zonble、Nelson、onevcat 三位資深工程師的對答。內容非常精彩,別的地方聽不到喔。
也很感謝在 iPlayground 與我們互動的聽眾朋友。謝謝你們的支持與鼓勵。
{ 完整節目筆記 https://weakself.dev/episodes/9 }
zonble 一言不合就開講- 聊聊輸入法
zonble 勘誤:「有個地方該是 n-gram 我說成 unigram。跟前後文有關的叫做 n-gram」 - XPC
補充資料:
Nelson 漫談 iOS 架構- 題目:漫談 iOS 架構:MVC / MVVM / VIPER 與 Redux
- 共同筆記
- 投影片
- 談 MVVM-C 裡的 coordinator
- Redux 有哪些坑?(有一小段切錯錄音模式了,所以聲音跑錯邊)
補充資料:
- Notification Queue - KKBOX iOS/Mac OS X 基本開發教材
- 題目:網路之難,難於上青天
- 共同筆記
- 投影片
- Client 會是 singleton 嗎?Token 放在哪裡?
- 創建 Networking SDK 的動機是什麼?
- 對於 iOS 學習路線的建議?
- 談 Refactoring 與測試
- 其他 iOS 關注的技術面向
- 網路框架怎麼加上 retry
- Dependency
- 一次有多個 API 請求怎麼做比較好
- Access token expiration
補充資料:
13 的 Xcode 小提醒 感謝涵宇贊助麥克風竟然送給我們一支 Blue Yeti,比小雪球高級多啦。這次活動的現場收音就派上了用場。
更多 weak self- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
8: 平行宇宙工程師
上禮拜明明就是 Apple 發表會,整個 podcast 錄完竟然一句話都沒提到。你們是活在平行宇宙嗎?沒錯,這集我們穿越時空回到「提問箱」的歷史去做節目了。再加上一個小時的錄音上限,就是一個輕鬆愉快的連假。
{ 完整節目筆記 https://weakself.dev/episodes/8 }
Q1 聲音品質不佳?我們買了三個小雪球。
Q2 想聽關於架構的事?- 資深文件工程師那集有稍微帶到
其實這段是在說,有些提問太 opaque 了
Q4 Code Review 時發生的爭執?目前沒有好的回答
都是修行啊(誤
聊了一下三人用過的 CI 服務:
其他有提到的東西
Q6 各種打臉 HR 的故事或方法?喬喬你是在煮心靈雞湯喔?
Q7 期待有 Android 話題的 Podcast?這個問題也是滿可愛的。我們有打算公開做 podcast 的 know-how。
Q8 為何 ViewModel 大多使用 class? 結尾:weak self 挑戰賽- 快點來我們的提問箱提問吧!
- 或是在 Twitter 推文時標注 #weakself挑戰賽
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
7: 這集叫罐頭🥫
趕在 Apple 發表會之前,我們剪了一小段閒聊。
「除了 iOS 以外你們會不會想接觸其他平台?」
「為什麼要突然問這個?」
「這個我知道,這個我知道。因為現在 iPhone 各種不利的謠言,坊間一直流傳,加上 Cook 又在發表會之前賣股票,大家在想 iPhone 是不是快 G 了。那如果 iPhone 有危機呢,身為 iOS 工程師當然連帶有危機~」
請注意,因為時程壓力,本集的聲音比較生肉,也沒有音樂。
{ 完整節目筆記 https://weakself.dev/episodes/7 }
Hi 大家好我是罐頭 珍奶版 iPhone- 藍波哥 Guilherme Rambo 的 Twitter
- 謠言集散地 https://9to5mac.com
- Apple TV HD
- Apple TV 4K
- Apple TV app
- Apple TV+
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
6: 真・三人・weak self
本集聊了工程師怎樣用 Twitter、以前學習寫程式的經驗、遇過的強者,以及對於至今節目內容的檢討。
雖然我們辦了投票決定是由一三來獨講這一集的節目,錄音時卻發生了意料之外的事情…。
{ 完整節目筆記 https://weakself.dev/episodes/6 }
開場獨白因為聽眾反映我們的聲音不好辨認,我們試著三個人分開錄音。不過,本來說好的分開錄音其實是一人錄一段,結果卻變成…
不是說好我一個人講嗎?抱歉囉,結果「一三摔到新買的 iPad mini」就不聊了🤪🤪🤪
來做貼紙囉 工程師怎樣用 Twitter- 沒空刷推的就來訂閱«13的開發者週報»
- Tweetbot 支援依照時間順序排列、列表
- 13 做的擋蓋板廣告開源 app—Blahker
- 13 整理的台灣 iOS 開發者 Twitter 列表—iOS Developers TW 🇹🇼
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
5: 這裡沒有心靈雞湯配大餅
受到推友 @GanNaSong 點菜的啟發,加上喬喬憋了很久沒講話,這次錄音一上來就問起 13 為什麼開始做 TDD,聊了軟體開發團隊的現象,就這樣講了 2 個小時😂
剪輯完有 1 小時 + 半小時的 bonus,開頭結尾也懶得錄了。歡迎測試高手來跟我們交流交流。
{ 完整節目筆記 https://weakself.dev/episodes/5 }
也來聊 TDD- 為什麼 13 開始搞 TDD
- TDD 跟 unit test 不是同一件事
- 喬喬入門 TDD 的挫折經驗
- 寫測試會遇到的幾個問題
- 團隊為什麼不寫測試
- SwiftUI 能算是 UI 的 TDD 嗎?
- 驗證 UI 的 Snapshot Testing
- 組織當中的問題都是溝通問題
- 追求完美無瑕的 code?
- 同事之間互相打擾要拉開時空
- 職業倦怠的解套方式
- 沒有在意就沒有傷害
本來已經要收尾了結果又繼續聊下去,後面 25 分鐘就當作 bonus 吧!
- 喬喬反省自己的職涯
- Team lead 或團隊領導者的角色
- 導入敏捷為什麼沒效
- 享勞健保怎麼會是福利
- Lynda.com - iOS App Development: Test-Driven Development
- 工程師幹話 - 技術主管怎樣有效利用時間
- TechLead YouTube Channel
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
4: 或許我可以把 title 改成資深文件工程師
啊哈,又是一集採訪節目。這次我們找了資深工程師 Nelson 來跟我們聊聊帶團隊的經驗。在開發團隊中,若有建立共用文件的習慣,會逐漸累積成事半功倍的效果,Nelson 他們是怎麼做到累積出 2、30 篇文件,後來又達成什麼效果呢?跟著 weak self 一探究竟吧。
{ 完整節目筆記 https://weakself.dev/episodes/4 }
最近在忙什麼- 聲音品質的調整
- 前一集有重新後製並上傳
- 這集喬喬人在外太空與我們錄音,所以聲音比較特別
- 波肥的 CocoaPods 研究心得
或許我可以把 title 改成資深文件工程師 :D
– @NelsonT 新人 onboarding 會交代哪些事情 Coding Style
- Objective-C formatter uncrustify
- 硬體廠的軟體開發經驗
- 波肥的 phabricator 經驗分享
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
3: 就是要豪華便當!詹里長 hokila 的技術研討會全攻略
這集邀請到特別來賓 iPlayground 總召—hokila,談談參加技術研討會的一些經驗與心得,以及 iPlayground 想帶給大家的社群氛圍。WWDC 跑 lab 跑到跟 Apple 工程師推坑買東西、日本的筋肉 Swift 是什麼東東,以及 iPlayground 的籌備祕辛,就是要聽 hokila。
⚠️警告!本集不太適合搭捷運或上班聽,怕你憋笑會內傷。
{ 完整節目筆記 https://weakself.dev/episodes/3 }
🤔為什麼叫做 hokila 🇹🇼台灣的 meetup 出國參加研討會的契機 🇯🇵日本研討會的神奇特色- iOSDC Japan
- 喜歡用國產 framework
- 筋肉.swift
- 在研討會乾杯🍻
公司沒補助的話,自己存 10~15 萬
hokila 去 WWDC 的經驗談
🇺🇸WWDC 周邊的研討會- AltConf
- try! Swift San Jose
- 研討會交朋友很厲害的道具🍍🍰
2018
- 為什麼叫 iPlayground?
- iPlayground 2018 影片大集合
- Ask the Speaker 強制配對
- 掀起 Swift 的小裙子面紗 - Pofat:影片、投影片
- 找很多業界資深工程師來對談的 Panel
- 為什麼叫詹里長?
- 感動的事情
2019
- 更多的國際講者
- 講題的難度有提高
- Chef Food Officer 🍱 便當不會讓大家失望
- 工商服務一下,搶票由此去
- 用 Twitter 追蹤知名的開發者
- 來聽 podcast
- 訂閱 «13的開發者週報»
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
2: Swift API 設計之原來我不會用 protocol
主題延續上一集的 Swift API 設計,進入了 protocol 與 generic 的領域。
{ 完整節目筆記 https://weakself.dev/episodes/2 }
前情提要CJ 同學提出了一個好問題:「Value type 在某些時刻,會存在 heap 中?」波肥寫了一篇 blog 文章來回答。
Protocol 是什麼? Protocol 也有兩種 POP 要解決什麼問題? 比起繼承,要多愛用 Protocol 組合 Protocol 使用指南- 先寫 concrete type
- 是否有已存在的 protocol 可以 extension
- 是否可由已存在的 protocol 組合完以成功能
- 優先考慮 Generic ,最後才是創造一個新的 protocol
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
1: Swift API 設計之 Value Type 與 Reference Type
波肥想跟我們談談使用 Swift 時,介面設計的想法、觀念與小技巧。因為太長講不完,所以這集先討論 Value Type 與 Reference Type。
{ 完整節目筆記 https://weakself.dev/episodes/1 }
Swift 這門語言的明確性原則 大量使用 Value Type 的 Swift- 值還是引用?
- Local Reasoning
- Understanding Swift Performance (WWDC 2016): Heap, Stack and Performance
- Swift 裡用來管理 heap memory 的資料結構是 doubly linked list
- 當你需要 retain count 以及 deinitialization 時
- 當你需要 shared 資料 (centrally held and shared, singleton)
- 當 identity 不等同於 equality
Tagged Pointer 詳解(只適用於 iOS 12 之前的版本。iOS 12 有新的 Tagged Pointer 機制)
假使拿 struct 包 class 扯題:SwiftUI 用的 @propertyWrapper 更多 weak self- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱
0: 如果你想要浪費一個人的暑假
三個在 iOS 開發圈打滾的台灣工程師,專為 Apple/iOS 開發者而製作的 Podcast。
這一集我們聊了 WWDC 到正式版發表這個期間,要怎麼安排時間跟資源。是要先學新東西,還是先修 bug 咧?
{ 完整節目筆記 https://weakself.dev/episodes/0 }
先解決相容問題 不要懷疑,就是官方的罷格- Xcode Release Notes
- iOS Release Notes
- Xcode 10.1 did not fix the iOS 9 asset catalogs crash problem - Developer Forums
- 如果能把 emoji 從 Public Beta 拿掉 - @chockenberry
- 檢查到是 iOS 13 beta 直接不給用 - @chockenberry
- 一三最近寫的 NSAttributedStringBuilder
- WWDC for macOS - wwdc.io
- Xcode 相關:401、412、413
- Swift Packages 與 XCFrameworks:408、410、416
- Sign In with Apple 相關:706、504
- iPadOS 與 SceneDelegate:212
- Great Developer Habits 239
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱