Xcode15适配

Xcode15适配

一、绘制图片崩溃

在将颜色绘制成图片时,出现了崩溃,原因为传入的size为0。

arduino 复制代码
+ (UIImage *)imageWithColor:(UIColor *)color withSize:(CGSize)size {
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
    [color setFill];
    UIRectFill(rect);   // Fill it with your color
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

发现UIGraphicsBeginImageContextWithOptions在iOS17被标记为过时。使用新方法修改为:

ini 复制代码
+ (UIImage *)imageWithColor:(UIColor *)color withSize:(CGSize)size {
    UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init];
    format.opaque = NO;
    format.scale = 0.0;
    UIGraphicsImageRenderer *render = [[UIGraphicsImageRenderer alloc] initWithSize:size format:format];
    UIImage *image = [render imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
        CGRect rect = CGRectMake(0, 0, size.width, size.height);
        [color setFill];
        UIRectFill(rect);
    }];
    
    return image;
}

测试一切正常。

二、报错DT_TOOLCHAIN_DIR

编译的时候报错DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead,这需要全局(包括第三方库)都要替换哈。

解决方法,直接在Podfile中修改,如下:

lua 复制代码
post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
​
  installer.aggregate_targets.each do |target|
    target.xcconfigs.each do |variant, xcconfig|
      xcconfig_path = target.client_root + target.xcconfig_relative_path(variant)
      IO.write(xcconfig_path, IO.read(xcconfig_path).gsub("DT_TOOLCHAIN_DIR", "TOOLCHAIN_DIR"))
    end
  end
​
  installer.pod_target_subprojects.flat_map { |p| p.targets }.each do |target|
​
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
      config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
​
      if config.base_configuration_reference.is_a? Xcodeproj::Project::Object::PBXFileReference
        xcconfig_path = config.base_configuration_reference.real_path
        IO.write(xcconfig_path, IO.read(xcconfig_path).gsub("DT_TOOLCHAIN_DIR", "TOOLCHAIN_DIR"))
      end
    end
  end
end

修改之前是

ruby 复制代码
post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
  
  installer.pod_target_subprojects.flat_map { |p| p.targets }.each do |target|
    target.build_configurations.each do |c|
      c.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
      c.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
    end
  end
end

添加了其中的DT_TOOLCHAIN_DIR相关内容。修改后记得删除Pods文件夹,重新pod install.

三、报错compact unwind compressed function offset doesn't fit in 24 bits

编译时出现Assertion failed: (false && "compact unwind compressed function offset doesn't fit in 24 bits"), function operator(), file Layout.cpp, line 5758.的报错。

解决方法:在Other Linker Flags中添加**-ld_classic**.

四、个推崩溃

升级到Xcode15后运行在iOS17系统没有问题,但是在iOS17以下的系统,那么就会崩溃啊。崩溃日志如下

less 复制代码
* thread #12, name = 'GTSDKThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x0000000000000000
    frame #1: 0x00000001028a60a4 qiji`merged type metadata accessor for Swift.Array<Dispatch.DispatchWorkItemFlags> + 48
    frame #2: 0x00000001028a5930 qiji`type metadata completion function for GTSDK.NetworkChannel + 132
    frame #3: 0x00000001a68858c8 libswiftCore.dylib`swift::MetadataCacheEntryBase<(anonymous namespace)::SingletonMetadataCacheEntry, int>::doInitialization(swift::MetadataWaitQueue::Worker&, swift::MetadataRequest) + 468
    frame #4: 0x00000001a68742d8 libswiftCore.dylib`swift_getSingletonMetadata + 880
    frame #5: 0x000000010289d82c qiji`type metadata accessor for GTSDK.NetworkChannel + 48
    frame #6: 0x00000001a59902b4 libobjc.A.dylib`realizeClassMaybeSwiftMaybeRelock(objc_class*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool) + 184
    frame #7: 0x00000001a599013c libobjc.A.dylib`initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool) + 136
    frame #8: 0x00000001a5973cbc libobjc.A.dylib`lookUpImpOrForward + 932
    frame #9: 0x00000001a596e0c4 libobjc.A.dylib`_objc_msgSend_uncached + 68
    frame #10: 0x000000010288c51c qiji`-[GXPushService initWithDelegate:] + 124
    frame #11: 0x000000010288b2a8 qiji`-[GXPushManager service] + 92
    frame #12: 0x00000001028685c4 qiji`__57-[GtSdkManager startWithAppId:appKey:appSecret:delegate:]_block_invoke_2 + 348
    frame #13: 0x00000001a6a68850 Foundation`__NSThreadPerformPerform + 264
    frame #14: 0x00000001ac779f34 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
    frame #15: 0x00000001ac78630c CoreFoundation`__CFRunLoopDoSource0 + 176
    frame #16: 0x00000001ac70a1d0 CoreFoundation`__CFRunLoopDoSources0 + 244
    frame #17: 0x00000001ac71fb8c CoreFoundation`__CFRunLoopRun + 836
    frame #18: 0x00000001ac724ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #19: 0x00000001a6a6f0d4 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #20: 0x000000010284a280 qiji`-[GTCThread main] + 228
    frame #21: 0x00000001a6a885a8 Foundation`__NSThread__start__ + 716
  * frame #22: 0x00000001fa7366cc libsystem_pthread.dylib`_pthread_start + 148

此现象必现,所以可以判断一定个推的问题了,直接联系了个推官方,10分钟后得到答复,是最低支持版本的问题。

解决方法:

五。Done

编译成功,运行成功,使用Xcode15提交App Store,审核成功。

声明: 解决方法来之网络,谢谢大神的无私奉献。

相关推荐
Frank学习路上12 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
瓜子三百克19 小时前
CALayer的异步处理
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao19 小时前
一步到位:用 Very Good CLI × Bloc × go_router 打好 Flutter 工程地基
flutter·ios
@PHARAOH21 小时前
WHAT - 依赖管理工具 CocoaPods
xcode·cocoapods
杂雾无尘1 天前
开发者必看:如何在 iOS 应用中完美实现动态自定义字体!
ios·swift·apple
kymjs张涛1 天前
零一开源|前沿技术周报 #6
前端·ios·harmonyos
与火星的孩子对话2 天前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
小溪彼岸2 天前
【XCode】Copilot for XCode AI编程助手
xcode
恋猫de小郭3 天前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
点金石游戏出海3 天前
每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜
游戏·ios·业界资讯·apple·崩坏星穹铁道