uni-app iOS18照片选择无法默认选择所有图片 会显示一个相册列表

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app iOS18照片选择无法默认选择所有图片 会显示一个相册列表

操作步骤:

  • 使用 系统版本 大于iOS 18 的手机。安装应用后,点击应用主页 底部导航 最中间的 “+” 按钮,选择发帖子。 然后点击 “ + ” 选择图片。从相册选择。

预期结果:

  • 选择手机相册图片,默认显示 全部图片的列表

实际结果:

  • iOS 18 只会出现 相册列表。并且没有所有照片的 相册

bug描述:

  • 使用 uni.chooseImage API
    • iOS18,照片选择无法默认选择所有图片。会显示一个 相册列表,但是没有 所有照片,或最近项目 的选项。附件中有截图
    • 使用 xcode 16 ,打包的最新基座,适配了ios18. 手机系统 18.0.1 才会出现
    • 在模拟器上使用标准基座正常。
    • 使用之前的 未适配 iOS18 的 自定义基座,在系统为 ios18.0.1 的真机上正常。
    • 使用低于 18.0 的手机 在新旧基座上都正常。

相关链接:

截图

截图


3 回复

应该是需要更新打包的sdk TZImagePickerController 这个库,最新的更新 已经修复了这个问题。 3.8.7版本修复了iOS18下无照片的问题 https://github.com/banchichen/TZImagePickerController
项目中使用的离线 SDK DCTZImagePickerController 应该和这个库差不多。估计也需要相同的更新。
但是查看官方的更新 iOS 离线SDK - 正式版 9月30日的 更新日志。并没有更新这个。 可能还是需要等待官方更新吧。


https://ask.dcloud.net.cn/question/199774 这个帖子统一处理 ios18 到问题,如果不是一个问题,请回复我

在iOS 18上,uni-app遇到照片选择无法默认选择所有图片的问题,通常是由于iOS系统的隐私权限增强以及相册访问API的变更导致的。在iOS 16及之后的版本中,Apple对相册访问进行了更严格的控制,特别是在处理大量照片时。虽然uni-app本身提供了便捷的跨平台开发能力,但在处理特定平台(如iOS)的高级功能时,可能需要对原生代码进行一些调整。

以下是一个基于uni-app的示例代码,展示如何在iOS平台上调用原生代码来尝试处理相册访问问题。请注意,由于uni-app的跨平台特性,直接操作原生代码通常需要使用uni-app的扩展机制,如插件或原生模块。这里提供一个思路,具体实现可能需要根据实际情况调整。

步骤 1: 创建原生插件(以iOS为例)

在iOS原生代码中,可以使用PHPhotoLibrary框架来访问相册。以下是一个简单的Objective-C方法示例,用于请求访问相册并获取所有照片:

#import <Photos/Photos.h>

@interface PhotoLibraryManager : NSObject
+ (void)requestAccessAndFetchAllPhotosWithCompletion:(void (^)(NSArray<PHAsset *> *assets, NSError *error))completion;
@end

@implementation PhotoLibraryManager

+ (void)requestAccessAndFetchAllPhotosWithCompletion:(void (^)(NSArray<PHAsset *> *assets, NSError *error))completion {
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        if (status == PHAuthorizationStatusAuthorized) {
            PHFetchOptions *options = [[PHFetchOptions alloc] init];
            options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
            PHFetchResult<PHAsset *> *assetsFetchResult = [PHAsset fetchAssetsWithOptions:options];
            completion(assetsFetchResult.objects, nil);
        } else {
            completion(nil, [NSError errorWithDomain:@"PhotoLibraryAccessError" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"Access denied"}]);
        }
    }];
}

@end

步骤 2: 在uni-app中调用原生插件

在uni-app中,你可以通过JSBridge调用这个原生方法。这通常需要在uni-app项目中配置原生插件,并在JS代码中通过特定的接口调用它。由于这部分涉及uni-app插件的开发和配置,具体代码和步骤较多,这里不展开。但基本思路是:

  1. 创建并配置uni-app原生插件。
  2. 在JS代码中通过plus.bridge.exec或类似方法调用原生插件提供的功能。
  3. 处理原生插件返回的数据,更新UI或执行其他逻辑。

由于篇幅限制,上述代码和步骤仅为示例性质,实际开发中需要根据具体需求和uni-app的版本进行调整和完善。

回到顶部