技术公告|保利威移动端SDK Xcode 16适配指南
苹果公司要求,2025年4月24日开始,所有上传到App Store Connect的应用必须使用Xcode 16或更高版本构建,并使用iOS 18、iPadOS 18、tvOS 18、visionOS 2或更高版本的SDK。
如果没有适配,您的应用可能面临:
·App Store提交时被拒绝
·与iOS 18和其他最新操作系统版本的兼容性问题
不少客户集成了保利威直播、点播或多场景SDK,如何适配Xcode 16的SDK版本?遇到哪些问题可能是未适配Xcode 16造成的?
目前,保利威移动端SDK已适配iOS18,本文将介绍保利威移动端SDK 适配Xcode 16的技术经验。
《未适配SDK的已知问题》
问题1
Bitcode相关错误
在使用Xcode 16提交应用到App Store时,您可能会遇到以下错误:
“`
The following issues occurred while distributing your application.
Asset validation failed Invalid Executable. The executable ‘YourApp.app/Frameworks/YourSDK.framework/YourSDK’ contains bitcode. (ID: 12345678-1234-1234-1234-123456789012)
“`
[问题原因]
Xcode 16完全移除了对bitcode的支持,而我们的旧版SDK仍包含bitcode。当您尝试提交应用时,App Store Connect会拒绝包含bitcode的二进制文件。
[实际案例]
某客户使用保利威移动端SDK 5.x版本,在Xcode 15上构建时一切正常,但升级到Xcode 16后,应用提交被拒绝,错误日志显示:
“`
Asset validation failed Invalid Executable. The executable ‘ClientApp.app/Frameworks/PLVIJKPlayer.framework/PLVIJKPlayer’ contains bitcode.
“`
[Bitcode错误示例]
问题2
maskView同名属性在iOS 18引发崩溃
在iOS 18中,如果您的SDK或应用中定义了与UIView类的maskView属性同名的属性,将触发断言并导致应用崩溃。
[问题原因]
iOS 18对UIView.maskView增加了断言检查。在之前的iOS版本中,开发者可能在自定义视图类中定义了名为maskView的属性,而这与UIKit中UIView类的属性同名。
在iOS 18中,当系统试图访问UIView的maskView属性时,会检查是否存在同名属性冲突,如果发现冲突,将触发断言并导致应用崩溃。
[崩溃表现]
当应用在iOS 18设备上运行时会出现崩溃,崩溃日志会显示类似以下内容:
“`
*** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Set `maskView` on <CustomView: 0x12345678> is not allowed.’
“`
或者显示断言失败信息:
“`
Assertion failed: (![self respondsToSelector:@selector(maskView)] || [self.class instancesRespondToSelector:@selector(maskView)]), function -[UIView maskView], file /Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-5023.100.106/UIView.m, line 13954.
“`
[受影响代码示例]
“`objc
// 在SDK或应用中的自定义视图类
@interface customView : UIView
@property (nonatomic, strong, readonly) UIView *maskView; // 与UIKit中UIView的属性同名
@end
@implementation customView
– (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.maskView];
}
return self;
}
– (UIView *)maskView {
if (!_maskView) {
_maskView = [[UIView alloc] init];
_maskView.backgroundColor = [UIColor clearColor];
// 其他配置…
}
return _maskView;
}
@end
“`
[解决方案]
将业务代码中的maskView属性修改为其他命名方式,例如改为customMaskView:
“`objc
@interface customView : UIView
// 修改为不同的名称以避免与UIKit冲突
@property (nonatomic, strong, readonly) UIView *customMaskView;
@end
@implementation customView
– (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.customMaskView];
}
return self;
}
– (UIView *)customMaskView {
if (!_customMaskView) {
_customMaskView = [[UIView alloc] init];
_customMaskView.backgroundColor = [UIColor clearColor];
// 其他配置…
}
return _customMaskView;
}
@end
“`
[注意事项]
1. 这个问题只在iOS 18及以上版本中出现,但建议对所有版本进行适配。
2. 如果您的SDK或应用中使用了第三方库,请确保这些库也已经适配了iOS 18,并检查它们是否存在maskView同名属性问题。
《保利威移动端SDK适配技术指南》
步骤1
更新至兼容Xcode 16的SDK
1.保利威移动端点播SDK
·帮助中心地址:https://help.polyv.net/#/vod/ios/
·GitHub地址:https://github.com/polyv/polyv-ios-vod-sdk
· SDK适配Xcode16推荐版本:2.23.0及以上。默认引用解决PLVIJKPlayer 0.15.0 解决bitcode问题。
·SDK适配Xcode16的最低版本:2.22.2。该版本仅解决SDK内部使用maskView同名属性问题,需升级PLVIJKPlayer 0.15.0版本
·若同时集成多场景SDK和点播SDK,请看本单元第五小节
2.移动端点播播放器 SDK
·帮助中心地址:https://help.polyv.net/index.html#/vod/ios_player_sdk/
·GitHub地址:https://github.com/polyv/polyv-ios-media-player-sdk-demo
· SDK适配Xcode16推荐版本:2.5.0及以上。默认引用解决PLVIJKPlayer 0.15.0 解决bitcode问题以及maskView同名属性问题
·若同时集成多场景SDK和点播播放器SDK,请看本单元第五小节
3.移动端多场景SDK
·帮助中心地址:https://help.polyv.net/#/live/ios/
· GitHub地址:https://github.com/polyv/polyv-ios-livescenes-sdk-demo
· SDK适配Xcode16推荐版本:1.24.0及以上。默认引用解决PLVIJKPlayer 0.15.0 解决bitcode问题
·SDK适配Xcode16最低版本:1.20.0.该版本修改Demo使用maskView同名属性的问题
·该SDK内部未使用maskView同名属性,仅Demo层有应用,如不升级可直接对Demo层源码进行修改
·若同时集成多场景SDK和点播相关SDK,请看本单元第五小节
4.移动端Webview SDK
·帮助中心地址:https://help.polyv.net/#/live/webview/
·GitHub地址:https://github.com/polyv/polyv-ios-webview-demo
·SDK适配Xcode16推荐版本:3.2.3及以上。
5.同时集成多场景SDK和点播相关SDK
·点播SDK 2.23.0及以上版本,除默认升级PLVIJKPlayer引用,同时涉及优化HttpDNS内部表现,升级了PLVAliHttpDNS至3.2.0版本。而多场景SDK 1.24.0及以下版本、点播播放器 SDK 2.5.0及以下版本 仍使用PLVAliHttpDNS 1.10.x版本,会造成SDK冲突。
·为避免PLVAliHttpDNS升级导致的冲突问题,可选择引用PLVAliHttpDNS 1.10.x的版本:将点播SDK版本号控制在2.22.2-2.22.4版本,点播播放器SDK版本号控制在2.5.0,多场景SDK版本号控制在1.20.0-1.24.0版本。后续我们会陆续发布适配PLVAliHttpDNS升级的多场景SDK和点播播放器SDK。
·同时集成多场景SDK和点播相关SDK,需升级PLVIJKPlayer 0.15.0版本,解决bitcode问题以及maskView同名属性问题
·若有引用相关问题可及时与保利威客服联系,我们竭诚为您解决相关问题。
步骤2
处理现有框架的Bitcode问题
如果您遇到与任何框架(包括第三方框架)相关的bitcode错误:
1. 导航到框架目录:
“`bash
cd path/to/Framework.framework
“`
2. 检查框架是否包含bitcode:
“`bash
otool -l Framework | grep __LLVM | wc -l
“`
3. 如果结果不为0,移除bitcode:
“`bash
xcrun bitcode_strip -r Framework -o Framework
“`
以上是保利威移动端SDK Xcode 16适配相关问题与说明,若有疑问可于联系保利威服务群联系技术顾问。demo演示或合作咨询请扫描下方二维码。
添加保利威技术顾问
获取专属解决方案
企业级视频SaaS领导品牌
#技术公告


