2014年3月20日 星期四

iOS 開發筆記 - 在 Compiler Time 使用 __has_include 偵測 Framework 是否存在

__has_include Framework

以 FacebookSDK 來說,之前一直都用 github.com/facebook/facebook-ios-sdk 來使用,最近發現 source tree 預設有一些 bug 無法在 Xcode 5.1 編譯成功,自行修又容易碰到維護問題,於是就跑去下載 Facebook 官方打包好的 facebook-ios-sdk-current.pkg 來用了。

之前用 Facebook source code 來編譯時,在 header file 的使用:

#import "Facebook.h"

然而,現在改用 FacebookSDK 時,則該使用

#import <FacebookSDK/FacebookSDK.h>

因此想要在 Compiler Time 來確認,因此來增加彈性。

所幸有找到類似堪用的方式(Include File Checking Macros):

#if defined(__has_include)
#if __has_include("FacebookSDK/FacebookSDK.h")
#import <FacebookSDK/FacebookSDK.h>
#else
#import "Facebook.h"
#endif
#endif


此外,在 Project 的 Build Settings,就可以這樣通用設定:
  • Framework Search Path: /path/sdk/FacebookSDK
  • Library Search Paths: ${SRCROOT}
  • User Header Search Path: /path/sdk/facebook-ios-sdk
其中 /path/sdk/FacebookSDK 指的是 facebook-ios-sdk-current.pkg 安裝位置(只要把pkg裡的 FacebookSDK.framework 拖進去會自動設定好),而 Library Search Paths 和 User Header Search Path 的設定則是為了採用 source tree 方式。

沒有留言:

張貼留言