技術公告|保利威移動端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領導品牌
#技術公告