2020年7月29日 星期三

用Carthage升級管理SDK的方法

用Carthage升級管理SDK的方法

Carthage是另外一種類似CocoaPods的Xcode第三方套件管理,而要用Carthage升級套件時該如何做呢? 首先, 打開終端機到專案根目錄並下touch Cartfile(名字一定要打這樣), 然後再打vim Cartfile, 之後便在裡面打 github "onevcat/Kingfisher" (這邊以要更新Kingfisher為例子), 儲存之後回到終端機, 然後再打 Carthage update Kingfisher這樣就可以升級Kingfisher, 而如果你只要升級build出支援iOS的framework就打carthage update --platform iOS, 這樣carthage就會把所有寫在Cartfile裡的套件打包出只有支援iOS的framework

2020年6月19日 星期五

Firebase Dynamic Links with iOS

Firebase Dynamic Links with iOS

此篇主要是分享iOS運用Firebase Dynamic Links的紀錄分享,不過在分享之前,我們需要先知道Firebase Dynamic Links是什麼東西,簡單來說的話Firebase Dynamic Links是可以讓你在有安裝某App時點擊連結就可以跳到該App(甚至是到App裡的某特定頁面,而如果沒有安裝的話則會導到App Store下載頁面)

iOS運用Firebase Dynamic Links的步驟:

1. 建立要用Firebase Dynamic Links的專案(或是現有專案要導入Firebase Dynamic Links)

2. 安裝Firebase Dynamic Links iOS SDK:
安裝方式有幾種,這邊介紹透過cocoapods安裝以及直接下載Firebase SDK:

(1). Cocoapods安裝: 打開終端機並切到你的專案底下並輸入pod init 來建立pod file,然後打開113Test.xcworkspace啟動專案並在Podfile裡面貼加 pod 'Firebase/DynamicLinks',儲存後關閉專案,然後在終端機輸入 pod install 就會把Firebase Dynamic Links安裝到專案裡面去,這就是Cocoapods安裝

(2). 直接下載SDK: 如果不想透過Cocoapods安裝的話也可以直接下載Firebase SDK,網址: https://firebase.google.com/docs/ios/setup?hl=zh-cn#frameworks 往下找到不使用 CocoaPods 進行集成,下載框架SDK zip的地方下載,下載後直接打開資料夾拖曳你要的SDK到你的專案裡,其中要注意的地方為有的SDK要搭配其他SDK才能正常運作,例如Firebase Dynamic Links要引用FirebaseAnalytics,所以就要同時加入FirebaseAnalytics和Firebase Dynamic Links的SDK,最後就是也要加入Firebase.h檔案,大致會像下圖所示:





3. Xcode專案裡的XXXDelegate引入Firebase.h檔案,然後在didFinishLauchingWithOptions的方法裡添加Firebase的設定程式碼,如下圖所示:




4. 打開網頁輸入https://console.firebase.google.com去Firebase後台

5. 進到Firebase的管理頁面之後,在左側的工具列選"成長",就可以在裡面看到Dynamic Links,看到之後再選開始使用,會要你輸入網域,有自己的網域的話則輸入自己的網域,沒有的話則輸入google免費提供的測試網域xxxx.page.link (例如我輸入的是maxsysehome.page.link),正個設定如下圖所示:






6. 去Apple Developer上設定要使用Firebase Dynamic Link的專案的identifier裡要啟動Associated Domain,如下圖所示: 

 
7. 在Xcode開發工具裡設定Associated Domain,其中前面一定要加applinks:(your domain)your domain就是你在Firebase Dynamic Links裡面設定的連結,ex: https://maxsysehome.page.link/maxsys,https://後面的就是你的Associated Domain如下圖所示: 



8. 接下來就可以在line裡面測試連結,ex:https://maxsysehome.page.link/?link=https://www.google.com?callHNCBPage?WFID1111?d&isi=520090927&ibi=com.ESCS.fourDO,則會出現以下畫面: 




此時如果順利按下OPEN就可以測試有裝App時則直接打開App,沒有安裝App時就會跳到該App的下載頁面,如果要做到進入App的特定的頁面的話則需要另外在專案的程式裡面處理

以上就是Firebase Dynamic Links整個的設定




參考資料:
1. Firebase Dynamic Link iOS GitHub下載網址: https://github.com/firebase/quickstart-ios
2. https://firebase.google.com/docs/dynamic-links/ios/receive
3. https://firebase.google.com/docs/ios/setup?hl=zh-cn#objective-c_1
4. https://firebase.google.com/docs/ios/setup?hl=zh-TW


2020年5月13日 星期三

Xcode 11以上與Xcode 10的差異



Xcode 11以上與Xcode 10的差異

Xcode 11開始的開發工具不管是新建立的專案或是整個UI介面都與Xcode 10系列有所差異,本篇就簡短的列出幾個不一樣的地方:

一. 專案架構
Xcode 11 開始新建專案時會多一個檔案(或兩個..看你是用Swift還是Objective C建立專案),就是SceneDelegate.swift(或是SceneDelegate.h, SceneDelegate.m),而這個檔案是用來作什麼的呢?以下就來說明一下:

1. 把之前在AppDelegate裡的applicationWillResignActive, applicationDidEnterBackground..等改到SceneDelegate裡面且名稱稍微有變,變成sceneDidEnterBackground, sceneWillResignActive..等,亦即原本AppDelegate全權處理App生命週期和UI生命週期變成只處理App生命週期,而UI生命週期則改為交由SceneDelegate負責,參考下圖:
                                                         Xcode 10 原先的模式


Xcode 11 以後的模式

SceneDelegate

2. AppDelegate裡面也拿掉了UIWindow *window的宣告改放到SceneDelegate裡面


二.  Xcode 工具的差異
Xcode 10系列的General裡面包含了signing,但在Xcode 11後是與Capabilities合併在一起

以上大致就是目前發現的差異的地方

2020年5月7日 星期四

淺談SSL安全憑證

淺談SSL安全憑證

網址有分為http與https,兩者最大的差別在於http是沒有受到加密保護的,而https的全名為HyperText Transfer Protocol Secure,意即利用SSL/TSL加密封包以保護交換資料的隱私與完整性以下就來介紹SSL:

SSL(Secure Sockets Layer)是一種安全協定,目的是為網路通訊提供安全及資料完整性的保障。SSL分為三個層級,當中有免費與付費的分別, 其分別是:

1. DV SSL網域驗證(Domain validated)是最基本的安全憑證,只需確認你是該網址的擁有者,申請後很快就可以簽發,只擁有最基本的加密傳輸,無驗證保證

2. OV SSL組織驗證(Organization validated)除了驗證網址的擁有單位 (公司行號、財團法人等等),也會人工驗證營利事業登記證等等來證明這個公司真正存在,來證明網域憑證的信任保障。

3. EV SSL延伸驗證(Extended validated)網址列旁邊會有綠色鎖頭及顯示經過驗證的組織單位,因此,不但會驗證公司證明文件也會實際查證公司的各項營業資料,有的 EV SSL 證書會賠償因為這個憑證加密失敗所產生的損失,在一定的保額內,每個憑證的保額不一樣喔!

參考網址:
1. https://zh.wikipedia.org/wiki/傳輸層安全性協定
2. https://wpointer.com/wordpress-tutorials/wordpress-maintenance/security/how-to-add-ssl/


2020年4月19日 星期日

Xcoed build error: multiple commands produce XXXX

這是舊的專案在Xcode 10以上編譯時可能會發生的問題,因為Xcode 10新增了一個 New Build System,此機制會檢查是否會有不必要的重建,所以問題有可能就此產生

解決方法為: (Xcode 10.1為列)
1. 去File --> Project Settings --> 將 Build System: 預設的 New Build System改為Legacy Build System

2020年4月16日 星期四

Swift 中的 open,public,internal,fileprivate,private等存取權限介紹

Swift有五個存取權限的關鍵字,分別是open、public、internal、fileprivate和private,一一分別說明如下:

1. private:
private訪問級別所修飾的屬性或者方法只能在當前類裡訪問,具有最低的存取權限宣告的區塊內才可取得,也就是{ } 內才可取得。若為class,可subclass和override。


2. fileprivate:
fileprivate訪問級別所修飾的屬性或者方法在當前的Swift文件裡可以訪問。


3. internal:
默認的存取層級,internal修飾符可忽略不寫internal訪問級別所修飾的屬性或方法在源代碼所在的整個模塊都可以訪問。如果是框架或者庫,則在整個框架內部都可以訪問,框架由外部代碼所引用時,則不可以訪問。如果是App代碼,也是在整個App內部可以訪問。


4. public:
可以被任何人訪問。但其他module中不可以被override和繼承,而在module內可以被override和繼承。


5. open:
可以被任何人使用,包括override和繼承。用於宣告class以及class內所有的成員,層級最高,所有module和source file都可取得,且可subclass和override此class。

存取權限的大小由大到小分別為: open -> public -> internal -> fileprivate -> private

2020年4月15日 星期三

Stack 與 Heap的介紹



程式宣告變數時會佔用記憶體,而記憶體分為三個部份來存放這些變數,分別是global、stack與heap。一一分別說明如下:

1. global:

用來放全域變數、靜態變數(static)等等。 ex: static NSString *URL = @"xxxxxxx"

2. stack:

台灣稱為堆疊,大陸叫做棧,具有LIFO(後進先出)的特性,記憶體配置方式是由高到低。
存放區域變數、函式的參數與函式的位址等等,由系統管理,必須在編譯時期為已知。這些變數的回收會發生在它從堆疊pop出去的時候,因為個數、大小什麼的都是已知,所以系統知道怎麼進行配置與回收。 ex: int age = 41

3. heap:

台灣正體中文稱為堆積,大陸叫做堆,記憶體配置方式是由低到高。
這裡的記憶體由使用者負責進行回收,配置則是由malloc或是new來負責。使用這裡的記憶體主要是用在編譯時期還不知道大小或個數的變數。例如說,你需要用一個陣列,這個陣列的大小要在執行的時候由使用者的輸入來決定,那你就只能使用動態配置,也就是把這個陣列配置在heap中。ex: NSArray *array = [NSArray array];
參考連結:
1. http://tung168.pixnet.net/blog/post/284837600-global%2Cheap%2Cstack
2. http://wp.mlab.tw/?p=312

2020年4月14日 星期二

解決XCode實機測試時發生的問題: Could not locate device support files

問題描述: 當這問題發生時表示實體機器iPhone的iOS版本比該版本Xcode所支援的裝置iOS版本高(例如手機的iOS版本為12.4,但Xcode所支援的iOS版本只到11.0)

解決方法: 將較新版本的Xcode裡的/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport路徑下的支援iOS版本複製到較舊版本的Xcode同樣路徑裡面即可解決

練英文聽力的方法

常常有朋友會問我如何訓練英文聽力,我通常會回答最好的方式就是直接認識外國的朋友,而且是可以用英文跟你對話的外國朋友(非外國人,但是願意跟你用英文對話練習的台灣朋友也是可以),因為營造英文環境是最直接的方法

然而,現實中並不是所有人都可以有個可以與你直接用英文練習的對象,因此,此時另一個練習英文聽力的最好方法就是每天聽BBC NEWS的Live...但對初學者來說..BBC NEWS過於艱深難懂..所以我更推薦找一部外語片..然後第一次單純用聽的..聽不懂也沒關係..就是聽就對了~~ 然後再放第二次..這一次...邊聽邊看該句英文的意思..並看看與自己想的是否一樣...但三次..再放一次看自己聽不聽得懂..所以等於一部片子放三次練習

只要每天堅持不斷的練習,有朝一日英文聽力必定有所進步

解決iOS 14上如果更換預設瀏覽器(例如從Safari換成Chrome)時, 用Scheme架構會無法回到上一頁的問題

 如果遇到以下問題時 須在Info裡的LSApplicationQueriesSchemes裡設定多增加https, 如下圖: