苹果公司要求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领导品牌

 

 

#技术公告