about iOS target version and SDK version

依然范特西╮ 提交于 2020-01-14 03:12:25

问题


iOS SDK is upgrading, and some new tech will appear, i.e, block is new tech.

So question is if "block" based implementation also can be distributed to lower target version or older iPhone ( 3G or first generation ) ?

how to cope with those issues ?


回答1:


The usual way to deal with this sort of issue is to selectively enable features at runtime based on the current OS version. However, this can be very complicated to manage.

  • Query the current OS version at runtime
  • Use weak linking
  • Dynamically create the class
  • Call the new features only if the new class is present

For example:

Class optionalClass = NSClassFromString(@"NSArtificialIntelligence");
if (optionalClass) {
  id optionalObj = [[optionalClass alloc] init];
  // ... 
}

The following documentation describes the process in detail:

  • Configuring a Project for SDK-Based Development
  • Using Weakly Linked Classes in iOS

You specifically mention blocks. This feature requires support from the compiler and Objective-C runtime, so it will not be available at all on older systems.




回答2:


You must weak link to libSystem.B.dylib if you are using blocks for iOS4 or later. Because blocks are able to compile with the latest iOS SDK but iOS2,3.0 and 3.1 don't have blocks runtime.

  • iOS 4 app crashes at startup on iOS 3.1.3: Symbol not found: __NSConcreteStackBlock

(Besides, you can use blocks for iPhone 2.2+. Please take a look at plblocks.)



来源:https://stackoverflow.com/questions/5776313/about-ios-target-version-and-sdk-version

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!