簡體   English   中英

__IPHONE_OS_VERSION_MIN_REQUIRED不會返回部署目標?

[英]__IPHONE_OS_VERSION_MIN_REQUIRED does not return deployment target?

為什么__IPHONE_OS_VERSION_MIN_REQUIRED返回基本SDK而不是部署目標?

我想使用一個只能在iOS 4.3及更高版本上運行的類,但仍支持4.0及更高版本。 為了實現這一點,我斷言如果我嘗試在iOS版本低於4.3的設備上使用此類。 為了避免斷言,我通過檢查4.3方法的可用性來避免類in-code。 部署目標當前設置為4.0。

但是,因為斷言只會在我在舊設備上運行應用程序時發生,所以如果部署目標小於4.3,我還想添加警告。 我正在嘗試使用__IPHONE_OS_VERSION_MIN_REQUIRED 然而,這不知何故繼續返回50000 (基本SDK)而不是43000以下的東西,我無法弄清楚為什么。

碼:

NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED); // Returns 50000 instead of 40000.
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 43000
// Never gets here
NSLog(@"%@", @"WARNING! NWMethodWrapper does not work on iOS versions below 4.3. If you insist on supporting older iOS versions, make sure you do not call NWMethodWrapper methods unless dlsym(RTLD_DEFAULT,\"imp_implementationWithBlock\") evaluates to true.");
#endif
NSAssert(dlsym(RTLD_DEFAULT,"imp_implementationWithBlock"), @"NWMethodWrapper uses methods that are only available from iOS 4.3 and later."); // Asserts, as appropriate (running on iOS 4.2.1).

編輯:我的部署目標已設置為4.0,這就是我問這個問題的原因。

如果您沒有自己定義__IPHONE_OS_VERSION_MIN_REQUIRED__IPHONE_OS_VERSION_MIN_REQUIRED最終由編譯器設置(通過“AvailabilityInternal.h”中的宏)以匹配您設置的最小iphone操作系統版本,因此您需要確保您的部署目標是設置為早於iOS 5.0的東西。

您必須確保行為類似的類實際上是相關項目的一部分,而不是通過工作區訪問的另一個項目的一部分。 可以將這些項目設置為自己的部署目標,這些目標不必與您在主項目中可能期望的部署目標相同。

在我的例子中,類的部署目標設置為5.0(而不是我的主項目,設置為4.0),這意味着__IPHONE_OS_VERSION_MIN_REQUIRED按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM