蘋果公司要求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領導品牌

 

 

#技術公告