顯示具有 Xcode 標籤的文章。 顯示所有文章
顯示具有 Xcode 標籤的文章。 顯示所有文章

iOS 開發:國際化、多語化




https://www.itread01.com/content/1549666469.html

https://kennc.github.io/2020/ios-localization/


開啟專案的國際化選項會有一個開關 Use Base Internationlization,在 Localizable.strings 中也會有 (Base) 檔案。許多人很自以為是地以為 Base 的意思是如果專案並沒有對某個語言做國際化,那麼就使用 Base 語言,然而事實並非是這樣的,實際上 Base Internationlization 是為 xib 和storyboard 服務的。

那麼iOS系統中語言選取的原則究竟是什麼呢?

舉個例子:假設一個應用使用的開發語言 (development language) 是英語,同時對法語、日語、阿拉伯語做了國際化。然而用戶的系統語言設定的是中文,那麼開啟應用會顯示什麼語言呢?

答案是根據用戶系統的首選語言列表而定,在系統設定-語言設定的介面,有一欄列表叫做首選語言列表,假設用戶當前系統語言是中文,但是之前一次選擇過阿拉伯文為系統語言,那麼這種情況下,該應用將會顯示阿拉伯文。

iOS 對應用語言的判定遵循的原則是:

1. 檢視應用是否針對系統語言做國際化,如有,選擇系統語言

2. 遍歷系統的首選語言,如果存在對首選語言做國際化,選擇該首選語言

3. 全部沒有的情況下使用 development language


設定好要顯示在不同語系的字串

格式固定是 Key = String,實作上這部分會是最花時間的,因為要把專案裡所有的文字都取一個Key 抽出來。

Key 沒有固定格式,一般會使用畫面做分類,用底線拆開單字,全大寫或全小寫。

這裡 Key 的命名有點小技巧,建議以畫面+元件+功能,比如:loginVC_login_button_login = "登入",這樣的命名可以幫助理解。


保證 UILabel 和 UITextField 等完美適應不同語言的不同長度

  • 利用 AutoLayout 讓 UILabel 根據內容自適應長度
  • 如果對 UILabel 或者 UITextField 有硬性的 MaxWidth 設定,達到了最大寬度但是無法顯示全,可以採用 AutoShrink 的方案。

針對 UILabel 可以在 xib 或者 storyboard 中設定 AutoShrink 屬性,該屬性的作用是如果 Label 內容顯示不下,使用何種策略來適應,

iOS 提供了多種選項,包括按比例縮放、最小字型、減小字間距。當然在程式碼中可以統一設定 UILabel 的 adjustsFontSizeToFitWidth、minimumScaleFactor、allowsDefaultTighteningForTruncation 等屬性,這些屬性預設都是 NO。

針對 UITextField,也有一個 Min Font Size 的屬性可以調整

  • 配合 Pseudolocalizations 提早發現介面溢位的問題
  • 特別需要注意的地方可以提前跟翻譯人員說明,控制字元長度


讓你的應用適配不同的佈局方向,將是個大坑

簡單說就是語系分為「從右到左」或「從左到右」,

若需要同時支援兩類語系,將會有許多眉眉角角需要處理。


如果需要手動獲取系統語言和地區環境,得留意當 iOS 改版時,取值的方法可能會改

當初 iOS 9 剛出來時,微博、微信等應用(這些應用都有一個共同的特點:可以在應用內手動設定系統語言)都出現了語言錯亂的問題,問題的根源就是 iOS 9 中取值的方法改變了。

在 iOS 9 以前,如果當前語言版本是英文,那就是 en,阿拉伯文就是 ar,中文就是 zh-Hans,

然而在 iOS 9 中,假設當前語言是簡體中文,當前地區是埃及,取出來的值就是:zh-Hans-EG,在 iOS 9 新的 API 中,同一個方法返回的引數會帶上地區的字尾。

所以原先對語言的判斷就不能單單 isEquasToString 了,起碼要使用 hasPrefix 方法或者做一下split。





開發 iOS,PCH 檔案的配置及使用

https://www.itread01.com/p/398294.html

在 Xcode 6 之前,建立一個新工程時 Xcode 會在 Supporting files 資料夾下面自動建立一個「工程名-Prefix.pch」檔案,這也是一個頭檔案,pch 標頭檔案的內容能被專案中的其他所有原始檔共享和訪問。是一個預編譯檔案。

PCH 檔案的作用

1. 用來包含一些使用頻率較高的標頭檔案

2. 存放一些全域性的巨集

3. 因為是預編譯檔案,會增加編譯時間,所以在 Xcode 6 以後,蘋果為了避免濫用 pch 檔案,不再自動生成。


在 PCH 中定義的巨集會自動新增到所有的檔案中,所以新增的時候要特別注意,一定要區分 C 檔案和 OC 檔案,如果不區分,把 OC 巨集用的內碼表新增到 C 檔案中,C 檔案無法識別 OC 中的框架就會報錯。

詳見課程影片:

https://www.youtube.com/watch?v=PI3hbyaYT2s&list=PLzKtnppOmiXAlARyp-aRjP0e-RsWiS4UW&index=12

還有如何區分 Debug 和 Release 等細節




Xcode 多版本共存

https://nickyuu.github.io/2017/09/20/14/


1. 手動下載 Xcode

https://developer.apple.com/download/more/


2. Xcode 多版共存

將舊的 Xcode 重新命名加上版本號


下載好新的 Xcode 後,解壓縮,解壓後再把新的 Xcode 拉到應用程式內重新命名


3. 切換預設 Xcode 版本

打開 terminal,使用 xcode-select 指令切換預設 Xcode 版本,後面參數為路徑:

1
2
3
4
# Xcode 8
sudo xcode-select -s /Applications/Xcode8.app
# Xcode 9
sudo xcode-select -s /Applications/Xcode9.app


查看版本:

在終端中使用下列指令

xcodebuild -version



Xcode 快捷鍵

文檔和參考: command + shift + 0 (Zero)

程式碼

command+C (複製)
command+V (貼上)

control+K (删除整行)
control+D (删一個字元)

command+[ (程式碼在同行往左縮)
command+] (程式碼在同行往右縮)
command+option+[ (整行程式碼往上移動一行)
command+option+[ (整行程式碼往下移動一行)
command+/ (註解)
command+Z (回復上一步)
command+B (編譯)
command + \ (開啟中斷點狀態設中斷點)
command+左/右键 (程式碼頭/尾)
command+shift+左/右键 (選取光標以左/右的程式碼)
command+L (直接跳到輸入行數的程式碼)
command+A (全選)

command+F (查此文件內的關鍵字)
command+Shift+F (查此專案內的關鍵字)

文件

command+N (增文件)
command+option+N (New Group)

command+W (關閉視窗)

command+O (打開專案)
command+S (儲存)

command+shift+O (查專案內的文件或某個方法定義)
command+control+左/右鍵 (剛瀏覽過頁面的順序)

編輯區
command+0 (隱藏左區Navigator)
command+option+0 (隱藏右區 Utilities)
command+shift+Y (隱藏下區 Debug Area)
command+control+F (視窗最大化)
command+H (視窗最小化)
command+tab (把最小化後的 Xcode 顯示回來)

輔助編輯器 Assistant Editor
command+option+enter (開)
command+enter (關)
option+左鍵點擊操作 (在輔助編輯器 Assistant Editor 中打開文件: 在項目導航器中選中文件執行)
control+6 (文件跳轉:鍵入方法/變量名+Enter 跳轉)

storyboard
control-shift-click (顯示UI階層清單)
control + enter (Label 內文字換行)

模擬器
command+R (跑模擬器)
command+Q (關閉模擬器)
command+左/右键 (切換橫豎屏)
option+shift (在模擬器中雙指拖動效果)
option (在模擬器中放大縮小效果)
command+shift+H (模擬器的 Home 鍵)
command+K (當 keyboard does not show up in simulator)

iOS 開發究竟該不該使用 Storyboard?

Google 關鍵字
「不使用 Storyboard」、「iOS 純程式碼」、「nib xcode」、「segue swift」


OK,讓我們坐下來好好談談 Storyboard:
https://medium.com/@royhsu510/aec2656cf16e


你為什麼不該在你的 iOS 軟體專案中使用 Storyboard
https://zonble.net/archives/2014_01/1540.php

=> 樓主的看法是不該使用 Storyboard,但是在討論區中也有讀者提出完全相反的看法
因為一個 App 應該要做好減法管理,避免過度膨脹,
在一個頁面有限的 App 中,使用 multi-storyboard,關鍵在於怎麼切分。


不使用 Storyboard 的好處
https://medium.com/@Chien_Cheng/813053e3692d
https://blog.bobthedeveloper.io/why-i-dont-use-storyboard-fe14a1a99f58


純 Swift 專案:Xib | StoryBoard 多人協作技巧
https://juejin.im/post/5c468f676fb9a049ed313183

如何將單個 VC (View Controller) 中的功能分解到幾個子 VC 中,並實現各個 VC 的交互,從而讓 VC 的體積不再無限增長:
https://www.jianshu.com/p/091c08c51f55


論壇的討論
https://kaif.io/z/programming/debates/b10ryBtyUL


捨棄 Storyboard 使用純程式碼 的方式撰寫 ViewController
https://ithelp.ithome.com.tw/articles/10160712


View Controller 流(純程式碼版)




在 2019 WWDC 大會上,Apple 發表了一令人振奮的消息,也就是 SwiftUI 的降臨,而 SwiftUI 和 UIKit 其實是對等的,都是用來處理 UI 的 framework,,網路上的學習文章也愈來愈多且豐富。不過呢,Apple 仍持續在調整 SwiftUI 的語法,網路上比較早期的部份教學文章或解法甚至都已經無法使用了。

UIKit 是從 Xcode1 就一直存在的 Framework;而 SwiftUI 則是 2019/6 WWDC 所發表的全新用來繪製 UI 的 Framework。因此,SwiftUI 必須搭配 iOS13+ 和 MacOS10.15+。

UIKit 底層仍為 Objecitve-C;而 SwiftUI 則是完完全全用 Swift 打造的 Framework。

使用 SwiftUI 所開發的專案,可以同時支援 iOS、macOS、watchOS、tvOS 等系統。

開發 iOS 的兩個派系,純 Code 、非純 Code 派,此兩派經常討論程式碼的一致性、直覺性,純 Code 總拿一致性抨擊對方,而另一方則是拿直覺性來回應之。不過,當 SwiftUI 降臨後的那一刻起,或許可以在這兩個派別間稍稍緩頰了。





Refactor to Storyboard: 使用多個 Storyboard 來開發專案

https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/e0d513fb5bcb

https://ithelp.ithome.com.tw/articles/10206572

在我們開發過程中,我們會經常在 Storyboard 上拖拉許多 ViewController,而這些 ViewController 其中又包含我們許多 View 的元件,所以在我們專案開發到一定程度的時候,
你會發現這樣做在 Storyboard 上會有許多缺點:

讀取速度隨著開發時間,越來越慢;
畫面間的 Segue 連線變得複雜;
很難找到其中一個 ViewController 的畫面;
當多人合作開發 App 時,如果大家都編輯同一個 storyboard,git 在合併時沒那麼聰明,時常會發生衝突...

不過現在這些問題都不再是問題了,因為 Xcode 可以讓我們在不同的 storyboard 設計畫面,然後再將這些畫面串接起來:

利用 Refactor to Storyboard 將多個 controller 拆到另一個 storyboard。

上架到 Apple App Store

Apple 官方的 App Store Review Guidelines (審查指南)
https://developer.apple.com/app-store/review/guidelines/

註冊成為 Apple Developer + 付費
https://ephrain.net/ios-%E8%A8%BB%E5%86%8A%E6%88%90%E7%82%BA-apple-developer-%E4%BA%86%EF%BC%81/

Apple 開發者帳號續約
http://kirafugames.blogspot.com/2014/03/0029-ios.html

App ID 建立流程
https://medium.com/@apppeterpan/93b283662e0c

App 上架和更新流程

定時清理 Xcode 運行所產生的資料

https://www.twblogs.net/a/5d40141abd9eee51fbf969c3


移除 Xcode 運行安裝 APP 產生的緩存文件(DerivedData)

只要運行 Xcode 就一定會生成,而且會隨着運行程序的增多,佔用空間會越來越大。清理後再重新運行程序一開始可能會稍微慢一點。

路徑:
~/Library/Developer/Xcode/DerivedData

釋放空間:0~xx GB


移除 APP 打包的 ipa 歷史版本 (Archives)

刪除後不可恢復,文件夾是按照日期排列的,所以如果你不想全部刪除,就只保留最新的幾個版本就好了。

路徑:
~/Library/Developer/Xcode/Archives

釋放空間:0~xx GB


移除 APP 打包的 app icon 歷史版本 (Archives)

刪除後不可恢復,文件夾是 Bundle Idenifier 排列的,然後再按照 archive 的版本號排列的,如果你看每個版本內的內容,其實就是你的 app icon。

路徑:
~/Library/Developer/Xcode/Products/

釋放空間:30M


移除模擬器的緩存數據 (Devices)

模擬器的相關數據。每個版本的模擬器佔用的內存空間大約爲 10MB 左右。每個文件夾裏包含的就是一個特定系統版本的設備的數據。每個文件夾對應哪個設備可以在其下 device.plist 中查看。刪除之後,如果立即運行程序會報錯,先關閉 Xcode,再重新打開程序,運行即可。運行該路徑下會立即生成模擬器對應版本的文件。

路徑:
~/Library/Developer/CoreSimulator/Devices/

釋放空間 ≈ 12GB


移除對舊設備的支持 (iOS DeviceSupport)

一般是佔用內存空間最大的文件夾,即使全部刪,再連接設備調試時,會重新自動生成。一般 iOS 只需要向下兼容幾個版本就可以了。

路徑:
~/Library/Developer/Xcode/iOS DeviceSupport

釋放空間 ≈ 3GB/版本


移除 Xcode 中無效的插件 (Plug-ins)

當過去安裝了一些 Xcode 的插件,比如 HighlightSelectedString、VVDocumenter-Xcode 等非常方便好用的第三方插件,在 Xcode 升級到 version 8.0 以後,就失效了,Xcode 在內部已經集成了類似的方法,所以之前安裝的也都沒有用了,但還在原來的位置佔用着內存空間,建議刪除。

路徑:
~/Library/Application Support/Developer/Shared/Xcode/Plug-ins

如果你沒有安裝過插件,那麼可能不存在此路徑。


移除舊版本的模擬器支持

如果你不小心安裝了很多個版本的模擬器,那麼你可以刪除一些舊版本的。但是當你需要舊版本的模擬器時,就需要重新下載了。建議留下 1~2 個版本就好了,其餘的都刪了吧。

路徑:
~/Library/Developer/CoreSimulator/Profiles/Runtimes/

釋放空間 ≈ 2.5GB/版本


移除 playground 的項目緩存 (XCPGDevices)

刪除後可重新生成,可以全部刪除。再次運行程序會緩存。

路徑:
~/Library/Developer/XCPGDevices/

使用 Xcode 幾年沒清理後,此文件夾也就佔用約 300MB 內存空間,可依據個人喜好操作。


移除舊的文檔 (Docsets)

刪除後不可恢復,該目錄下存儲的爲開發文檔,一般有三個文件com.apple.adc.documentation.iOS.docset (1.68GB)、
com.apple.adc.documentation.OSX.docset (2.62GB)、
com.apple.adc.documentation.Xcode.docset(256.4M),
如果你只做 iOS 開發,其實你可以把 OSX.docset 刪除掉的,因爲它佔用了 2.62GB 的內存。

路徑:
~/Library/Developer/Shared/Documentation/DocSets

整體所佔空間約 4.56 GB


移除模擬器中的 SDK 版本 (iPhoneSimulator.sdk)

不可恢復,操作請慎重。
我個人的此路徑下只有最新版本的 sdk,除非當你有多個版本的 sdk 再斟酌刪除。

路徑:
~/application/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

佔用空間約 4GB,刪除時請慎重





 如何徹底刪除 Xcode 相關的東西

sudo /Developer/Library/uninstall-devtools –mode=all

然後再刪除Developer文件夾

sudo rm -rf /Applications/Xcode.app

sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist

然後刪除自己目錄下的:

rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist

rm -rf ~/Library/Caches/com.apple.dt.Xcode

rm -rf ~/Library/Application\ Support/Xcode

以及和開發者相關的:

rm -rf ~/Library/Developer/Xcode

rm -rf ~/Library/Developer/CoreSimulator

rm -rf ~/Library/Developer/XCPGDevices


每個 xocde 都會自帶一個模擬器,且都是隨安裝包一起打包的,比如 xcode8.0 的就自帶 iOS10 的模擬器,這個是沒辦法刪除。

但是對於想要用iOS10以前的模擬器,可以通過這裏進行下載:



最終下載的模擬器被放置在這個位置:
/Library/Developer/CoreSimulator/Profiles/Runtimes/


如果版本太舊可以通過以上位置進行刪除即可。


macOS: 如何完全移除 Xcode

移除時需要在終端機使用 sudo 指令,所以管理者帳號需要有設定密碼的。


打開「終端機」:
在 Finder  中,打開「/應用程式/工具程式」檔案夾,然後按兩下「終端機」。


因為東西是在 / 下面,並不是在自己的資料目錄中,所以最前面要加上 sudo 。

sudo rm -rf /Applications/Xcode.app
sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist
接著就都是刪除自己目錄下有關 Xcode 的東西
rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist
rm -rf ~/Library/Caches/com.apple.dt.Xcode
rm -rf ~/Library/Application\ Support/Xcode
和開發者相關工具
rm -rf ~/Library/Developer/Xcode
rm -rf ~/Library/Developer/CoreSimulator
rm -rf ~/Library/Developer/XCPGDevices
這樣子就可以完整乾淨的解除安裝了



結束終端機:
在 Mac 上的「終端機」App  中,選擇「終端機」>「結束終端機」。




iOS 開發:點選 segment control 可切換顯示不同的頁面


我們時常在 iOS App 上見到如下圖 App Store 的畫面設計,點選 segment control 可切換顯示不同的頁面:
有很多方法可實現這樣的畫面


利用多個 container view 切換頁面:
https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/6d00fe848572


iOS App開發 – UIViewController 的七種切換頁面技巧:
http://www.iotec.tw/?p=54

iOS 教學: Universal Link (通用鏈接) & URL Scheme

http://www.iotec.tw/?cat=12

如果希望在 App A 按一個按鈕,立即切換至 App B,
或是用手機瀏覽網頁時,按一個連結,自動打開 App,
這個時候,需要使用的技術有二個,一個是 URL Scheme,另一個是 Universal Link。


這二種技術略有不同,說明如下:

iOS URL Scheme (Objective C)
[application openURL:[NSURL URLWithString:@"iotecapp1://page/12"] options:@{}
completionHandler:^(BOOL success) {}];
Universal Link (HTML)
<a href="https://www.iotec.tw/page/12">Open IOTEC App </a>

設定方式

iOS URL Scheme

Xcode > TARGETS > your_app > Info > URL Types

增加 URL Scheme 為 iotecapp1

Universal Link

Xcode > TARGETS >your_app > Capabilities > Associated Domains

增加 applinks:www.iotec.tw

www.iotec.tw 必須支援 HTTPS

編寫 apple-app-site-association (詳見官方文件)

文件類型需為 json且無副檔名

將 apple-app-site-association 放至 https://www.iotec.tw/ 底下
或是
https://www.iotec.tw/.well-known/ 底下

到 Apple Developer webpage 將 App 的 Associated Domain 功能打開


可否接收完整 URL(也就是說,可否傳遞參數?)

iOS URL Scheme &Universal Link

二者皆可。可以取得完整的 URL,把後面的參數部份取出即可。

例: iotecapp1://page/12 後面的 page 與 12 等等即可傳遞參數


觸發方法 (iOS Objective C, AppDelegate.m)

URL Scheme
- (BOOL)application:(UIApplication *) application  openURL:(NSURL *)url
      options: (NSDictionary <UIApplicationOpenURLOptionsKey, id>*)options;
Universal Link
-(BOOL) application:(UIApplication *)application
          continueUserActivity:(NSUserActivity *)userActivity
          restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler;

從網頁觸發時,如果沒有裝 App, 可否導向指定網頁?

URL Scheme

Partially YES
可以用 Timeout 方式處理,但不是 100% 成功

Universal Link
可以無縫接軌

可否從 APP 觸發?

URL Scheme
沒有問題,還可以判斷另一個 APP 是否有安裝

    [application openURL:URL options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened URL Scheme %@",scheme);
        }else{
            NSLog(@"Opened URL Scheme %@ FAILED",scheme);
        }
    }];
Universal Link
有些情況下可能有問題

用 UIWebview 或是用 SFSafariViewController 開啟 Universal Link 在官方文件上似乎是不建議的作法,
有文章提到 UIWebView 裡必需要在切換 domain 時才會觸發 Universal Link。實際上會發生什麼事還需要有用過的人交流一下。

安全性?

URL Scheme

因為任何 APP 都可以註冊自己處理 iotecapp1的 prefix 的 URL Scheme,這會有潛在性的安全問題。
Ex: 如果您的官網透過 URL Scheme 來開啟您的 APP,使用的 URL Scheme prefix 為
“yellow://…”, 而很不巧的剛好有個限制級 APP 也使用 yellow 作為 URL Scheme prefix,
那麼就會有機率開錯了 App…
雖然手機上為何會裝該 APP 使用者本身也要負一點責任…. 不過這邊的行為與設計原意就不一致了

Universal Link
相對安全很多

參考官方文件
Support Universal Links:
https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html

Communicating with Other Apps Using Custom URLs:
https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls


Auto Layout 入門教學

Apple 官方文件:https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html


https://www.appcoda.com.tw/introduction-auto-layout/

Auto Layout 是一個以約束條件為基礎的佈局系統,它可以讓開發者建立一個可以因應不同螢幕尺寸與裝置(device)方向而調整的自適應介面(adaptive interface)


Align – 建立一個對齊的約束條件,例如對齊兩個視圖的左側。
Pin – 建立間距約束條件,例如定義一個UI控制的寬度。
Issues – 解決佈局問題。
Resizing – 指定尺寸調整後影響約束條件的方式為何。

首先,以 Single View Application iOS App 模板來設定一個新的專案。在專案選項的 Device,選擇 iPhone,然後儲存專案,然後打開 Storyboard。你會注意到在右下角區域有一個選單。在選單的按鈕是跟 Auto Layout 有關,你可以用它來處理對齊(alignment),尺寸(sizing)、間距(spaceing)以及約束條件(constraint)問題。

自動佈局是一個很神奇的工具,它能做到以之前的技術連作夢都無法辦到的事情。對於在建立視圖間的交互關聯中其邊緣狀況(edge case)的處理,Auto Layout充分展現了強大的力量。Auto Layout 還能夠與許多 Apple 中最令人興奮的應用程式介面(APIs)相容,其中包括了動畫(animation),移動特效(motion effect)以及 sprite。

我知道有許多討厭 Auto Layout 的開發者,也許是這是一個新的技術,或者第一次使用時感到很難使用。不管你是否相信,倘若你習慣它,它會變成最棒的工具之一,沒有它的話,反而開發不了 App 了。

除了 Auto Layout 外,Apple 讓開發者可以更彈性使用 Control 加上拖曳來設定 Auto Layout,你只要從任何視圖按住 control 鍵不放,然後拖曳來設定相互間的約束條件即可。當你將滑鼠放開,它會呈現一個相關約束條件列表來讓你選取。


在視圖中設定完約束條件之後,約束線(constraint line)不是以橘色就是藍色來呈現。橘色約束線表示目前的約束條件不足,你必須要去修正它。


出現藍色的約束條件,表示你的佈局已經正確的設定,沒有其他模糊不清的情況。


有時候在約束條件建立後,介面建構器大綱(Interface Builder outline)視圖會顯示一個揭示箭頭。這個紅色的箭頭指出還有些衝突或者不清楚的情況。點擊這個揭示箭頭,你會見到一串問題。這些問題是以場景(scene)為基礎來顯示。一般會出現像是約束條件不足,約束條件衝突以及視圖錯位的問題。


在尺寸檢閱器(Size Inspector),你可以見到所有已經加入的約束條件清單,這些約束條件出現在稱作「Constraints」的區塊中。


除了尺寸檢閱器視圖以外,這些約束條件也會出現在介面建構器大綱內的相對應視圖下。




Xcode 使用 SPM 安裝第三方套件

使用 SPM 安裝第三方套件 — Xcode 11 新功能

https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E4%BD%BF%E7%94%A8-spm-%E5%AE%89%E8%A3%9D%E7%AC%AC%E4%B8%89%E6%96%B9%E5%A5%97%E4%BB%B6-xcode-11-%E6%96%B0%E5%8A%9F%E8%83%BD-2c4ffcf85b4b

開發 iOS App 時,我們有許多管理安裝第三方套件的方法,其中最為人熟知的三大套件管理天王為 CocoaPods,SPM(Swift Package Manager) & Carthage。

原本 CocoaPods 應該是其中最多人採用的,不過在 Xcode 11,一下子風雲變色,排名即將大搬風了。因為現在 Xcode 11 內建支援 SPM !


如何管理 Xcode 版本

https://13h.tw/2019/11/01/manage-xcode-versions.html

我們到底要保留哪幾版 Xcode?
這完全是要看你手邊專案的狀況。三個版本不算誇張:
  1. 前一個正式版,如果舊版 app 出了問題可能要回去看。比如說你舊版 app 的 Swift 版本是上一代
  2. 目前的正式版,用在最近上架更新的 app
  3. 最新的 beta 版,如果要使用一些新系統才有的 API

重點:
  1. 不要用 Mac App Store 安裝 Xcode
    • 從官網下載
    • 或透過 xcode-install 管理
  2. 弄清楚相容性測試的優先順序
  3. 可以透過 Fastlane 幫助團隊管理 Xcode 版本

內容備忘:

1. 直接從 Apple Developer 網站下載 Xcode
其實 Apple 官網一直有下載 .xip 壓縮檔版本 Xcode 的連結,但是藏得有點深。

下載頁面的首頁是 https://developer.apple.com/downloads。而列出下載檔的位置是在 https://developer.apple.com/downloads/more。都需要登入開發者帳號。




程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...