Delete images in camera roll from code iOS

2019-02-15 18:21发布

问题:

Is there a way to delete images (and videos) in camera roll in the photos app that my app didn't create. I know you can't delete things from Asset Library that your app didn't create. But this app isn't on app store. It's on a kiosk type environment. So I can use private APIs.

So is there a way to do this using private APIs that apple would not approve for the app store, but would work for my situation.

Thanks.

回答1:

Yep, you can do this in iOS 8 using Photos framework.

For example if you have Assets URLs stored in NSArray *assetsURLs

PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
    [library performChanges:^{
        PHFetchResult *assetsToBeDeleted = [PHAsset fetchAssetsWithALAssetURLs:assetsURLs options:nil];
        [PHAssetChangeRequest deleteAssets:assetsToBeDeleted];
    } completionHandler:^(BOOL success, NSError *error)
     {
         //do something here
    }];

this code will ask user to confirm removal from Camera Roll.



回答2:

Here is a version for Swift that will delete all photos in the library.

First, you will need to be sure that you have the key for permissions in your app's info.plist file:

You will need to have been given permission by the user to access Photos (not including code here for that).

Next, the import & code:

import Photos

func deleteAllPhotos() {
    let library = PHPhotoLibrary.shared()
    library.performChanges({
        let fetchOptions = PHFetchOptions()
        let allPhotos = PHAsset.fetchAssets(with: .image, options: fetchOptions)
        PHAssetChangeRequest.deleteAssets(allPhotos)
    }) { (success, error) in
        // Handle success & errors
    }
}

When this code is called, the user receives an OS prompt asking to confirm the deletion. Assuming they click yes, then everything is gone.