此篇文章完整範例呈現於GitHub,若有需要參考可直接clone 並切換到每個階段,有任何問題也歡迎直接在底下留言或在GitHub 開issue。
如果因應需求,需要讓兩個app 是可以同時安裝的話,這樣的設定是不夠的,但我們需要改的東西不多,讓我們延續上例繼續改進。
首先我們可以先到Project 當中,打開app target 的Info.list
看一看,我們可以看到Bundle identifier 已經是透過參數帶入。
此篇文章完整範例呈現於GitHub,若有需要參考可直接clone 並切換到每個階段,有任何問題也歡迎直接在底下留言或在GitHub 開issue。
在專案當中,有時候我們會透過類似以下的用法來判定是否為某一個開發環境:
struct Config {
static let isProduction = false
static let apiURL = isProduction ? "www.production.server.com" : "www.test.server.com"
}
如果我們需要release 不同環境的app 時,我們必須要手動去更改isProduction
的值,有時候一個不小心Build 了十幾分鐘發現自己忘了改、改錯了、不小心把設定Commit 了… 等等團隊開發中容易誤導的問題,都相當的困擾,因此應該用良好的方法來避免這樣的問題發生。
最近剛到新公司,這裡的專案大量的使用Storyboard,在前公司時,因為多人協作的關係,並沒有使用Storyboard 在進行開發,因此,結合了一些已閱讀過的觀念,順便來實作看看。
原本使用Storyboard 要拿到一個viewController 的instance 時,需要像這樣:
func foo() {
let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
let initViewController = storyboard.instantiateInitialViewController()
let viewController = storyboard.instantiateViewController(withIdentifier: "AnIdentifierForViewController") as! ViewController
// Do something...
}
這邊有幾個缺點:
as!
來做downcast,但不使用強制轉型又顯得哆嗦Swift 透過ARC 來做記憶體管理,在4.1 以前,Compiler 自動幫我們在該retain、release 的地方加上code(跟Objc 相同)
class X { ... }
func caller() {
// x 被created 之後,+1 reference count
let x = X()
foo(x)
}
func foo(x: X) {
let y = x.value
...
// 用完x之後,release x
}
往年看完WWDC,都沒有特別做些筆記,大多數的議程都是碰到技術相關需要才去讀,今年特地把看過的議程做些筆記,也希望可以加強自己的英聽🤣,不過也由於是筆記形式的紀錄,內容不保證完全正確,甚至有些因為經驗不足可能聽不太懂🙇♂️(例如比較進階的Swift generic 用法之類的),未來若有碰到我應該也會再查資料往回填,望請其他大神指教。
以下是目前為止看完的議程,將會持續更新:
© 2022 Marcus’ Blog
Theme by Anders Noren — Up ↑