gpt4 book ai didi

iOS10 UIImageWriteToSavedPhotosAlbum TCC__CRASHING_DUE_TO_PRIVACY_VIOLATION

转载 作者:行者123 更新时间:2023-11-29 05:34:47 24 4
gpt4 key购买 nike

我想在 iOS 10 中创建并保存 UIImage。我可以通过拍摄 UIView 快照或使用 UIGraphicsImageRenderer 创建它( 如下所示)。

- (UIView *)createIcon
{
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(200, 200)];

UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[[UIColor darkGrayColor] setStroke];
[context strokeRect:renderer.format.bounds];
[[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:0.5] setFill];
[context fillRect:CGRectMake(30, 30, 140, 140)];
[[UIColor colorWithRed:243/255.0 green:122/255.0 blue:216/255.0 alpha:0.3] setFill];
CGContextFillEllipseInRect(context.CGContext, CGRectMake(30, 30, 120, 120));
}];

UIImageView *showImage = [[UIImageView alloc] initWithImage:image];

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

return showImage;
}

但是,当我尝试通过包含倒数第二个语句来使用 UIImageWriteToSavedPhotosAlbum 进行保存时,Xcode 会进入调试状态,并显示以下错误报告

(lldb) bt
* thread #5, queue = 'com.apple.root.default-qos', stop reason = signal SIGABRT
* frame #0: 0x00000001101611a6 libsystem_kernel.dylib`__abort_with_payload + 10
frame #1: 0x000000011015b86e libsystem_kernel.dylib`abort_with_payload_wrapper_internal + 89
frame #2: 0x000000011015b89b libsystem_kernel.dylib`abort_with_payload + 9
frame #3: 0x0000000108ab3af7 TCC`__CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 182
frame #4: 0x0000000108ab3a41 TCC`__TCCAccessRequest_block_invoke.77 + 665
frame #5: 0x0000000108ab7273 TCC`__tccd_send_block_invoke + 274

所以,即使我没有使用相机来创建图像,将其保存到相册也是侵犯隐私的行为(嘘,嘘)!我知道可以设置 privacy keys in the plist但还有更明智的选择吗?

澄清

我希望使用渲染图像(或 View 快照)作为应用程序中的资源。那么除了还有更明智的选择吗?

也许我应该问

是否有其他位置可以保存图像(即 PNG 或 JPG 文件),这样隐私就不是问题?

最佳答案

您可以将任何 UIImage 保存到相册中,但首先您必须征求用户的许可,因为这确实是一个隐私问题。如果他们不给您访问权限,那么您根本无法保存图像。

最明智的方法是将所需的隐私 key 添加到 info.plist。

这是 info.plist xml 定义,尽管在属性列表中添加键更容易:

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Message requesting the ability to add to the photo library</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Message requestion the ability to access the photo library</string>

如果您添加这些内容,那么当您第一次尝试访问或添加到照片库时,将显示一个弹出窗口,其中包含您的消息,允许用户决定是否希望您的应用有权访问。

将其放入 info.plist 文件的一个很好的理由是,所有访问请求都位于一个易于可见的位置,而不是项目中随机的某个位置。

编辑

以下是如何将图像保存在不会引起隐私问题的文档中:

NSData *imageData = UIImagePNGRepresentation(image);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[imageData writeToFile:filePath atomically:YES]; //Write the file

如果您想要 jpg 而不是 png,请使用此代替:

NSData *imageData = UIImageJPEGRepresentation(image, 0.9); // Use whatever compression ratio you want instead of 0.9

关于iOS10 UIImageWriteToSavedPhotosAlbum TCC__CRASHING_DUE_TO_PRIVACY_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com