Skip to content

Photos macOS xcode13.0 rc

Alex Soto edited this page Sep 14, 2021 · 1 revision

#Photos.framework

diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHAsset.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHAsset.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHAsset.h	2021-08-07 05:22:33.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHAsset.h	2021-08-03 21:52:06.000000000 -0400
@@ -55,9 +55,6 @@
 
 @property (nonatomic, assign, readonly) PHAssetSourceType sourceType API_AVAILABLE(ios(9));
 
-// only applies to adjusted assets
-@property (nonatomic, assign, readonly, nullable) NSString *adjustmentFormatIdentifier API_AVAILABLE(macos(12), ios(15), tvos(15));
-
 #pragma mark - Capabilities
 
 - (BOOL)canPerformEditOperation:(PHAssetEditOperation)editOperation API_AVAILABLE(macos(10.15));
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHChange.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHChange.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHChange.h	2021-08-07 05:22:34.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHChange.h	2021-08-03 21:52:07.000000000 -0400
@@ -73,7 +73,7 @@
 @property (atomic, strong, readonly) NSArray<ObjectType> *changedObjects;
 
 // Enumerates the indexes of the moved items, relative to the 'before' state of the fetch result after applying the removedIndexes and insertedIndexes
-- (void)enumerateMovesWithBlock:(void(^)(NSUInteger fromIndex, NSUInteger toIndex))handler NS_SWIFT_DISABLE_ASYNC;
+- (void)enumerateMovesWithBlock:(void(^)(NSUInteger fromIndex, NSUInteger toIndex))handler;
 
 // YES if there are moved items
 // returns NO if hasIncrementalChanges is NO
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHCloudIdentifier.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHCloudIdentifier.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHCloudIdentifier.h	2021-08-07 08:54:51.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHCloudIdentifier.h	2021-08-03 21:52:05.000000000 -0400
@@ -2,24 +2,22 @@
 //  PHCloudIdentifier.h
 //  Photos
 //
-//  Copyright © 2021 Apple, Inc. All rights reserved.
+//  Copyright © 2017 Apple, Inc. All rights reserved.
 //
 
 #import <Photos/PHPhotoLibrary.h>
 
 NS_ASSUME_NONNULL_BEGIN
+API_AVAILABLE_BEGIN(macos(10.13))
 
-API_AVAILABLE_BEGIN(macos(10.13), ios(15), tvos(15))
+API_UNAVAILABLE_BEGIN(ios, tvos, macCatalyst)
 
 
 OS_EXPORT
 @interface PHCloudIdentifier : NSObject <NSSecureCoding>
 
-/// DEPRECATED: If there is a failure to determine the global identifier for a local identifier, the notFoundIdentifier is provided in that array slot.
-@property (class, nonatomic, readonly) PHCloudIdentifier *notFoundIdentifier
-
-API_DEPRECATED_WITH_REPLACEMENT("Check for PHPhotosErrorIdentifierNotFound in PHCloudIdentifierMapping.error", macos(10.13, 12)) API_UNAVAILABLE(ios, macCatalyst, tvos);
-
+/// If there is a failure to determine the global identifier for a local identifier, the notFoundIdentifier is provided in that array slot.
+@property (class, nonatomic, readonly) PHCloudIdentifier *notFoundIdentifier;
 
 @property (nonatomic, readonly) NSString *stringValue; /// For use in serialization
 
@@ -27,65 +25,19 @@
 
 @end
 
-API_AVAILABLE_END
-API_AVAILABLE_BEGIN(macos(12), ios(15), tvos(15))
-
-/// Contains the cloud identifier result from looking up a local identifier via \c cloudIdentifierMappingsForLocalIdentifiers, or an \c error indicating why the lookup failed
-OS_EXPORT NS_REFINED_FOR_SWIFT
-@interface PHCloudIdentifierMapping : NSObject
-@property (nonatomic, readonly, nullable) PHCloudIdentifier *cloudIdentifier; /// The cloud identifier of the resource found for this local identifier
-@property (nonatomic, readonly, nullable) NSError *error; /// error An error indicating why the \c cloudIdentifier is nil. \c PHPhotosErrorIdentifierNotFound if no resource could be found for the provided local identifier.
-@end
-
-/// Contains the local identifier result from looking up a cloud identifier via \c localIdentifierMappingsForCloudIdentifiers, or an \c error indicating why the lookup failed
-OS_EXPORT NS_REFINED_FOR_SWIFT
-@interface PHLocalIdentifierMapping : NSObject
-@property (nonatomic, readonly, nullable) NSString *localIdentifier; /// The \c NSString representing the local identifier of the resource found for this cloud identifier, or nil if the match was not found.
-@property (nonatomic, readonly, nullable) NSError *error; /// An error indicating why the \c localIdentifier is nil. \c PHPhotosErrorIdentifierNotFound if no resource could be found for the provided cloud identifier. \c PHPhotosErrorMultipleLocalIdentifiersFound if the cloud identifier matched more than one photo libray resource, so there were multiple local identifiers found. The array of matching local identifiers can be retrieved from the error's user info via the \c PHLocalIdentifiersErrorKey
-@end
-
-@interface PHCloudIdentifier () <NSCopying>
-@end
-
-API_AVAILABLE_END
-
-API_AVAILABLE_BEGIN(macos(10.13), ios(15), tvos(15))
-
-
 @interface PHPhotoLibrary (CloudIdentifiers)
 
-
-/**
- @abstract Returns a dictionary that maps each cloud identifier from the provided array to a PLLocalIdentifierMapping result containing the local identifier found for that cloud identifier.
- @discussion This method can be very expensive so they should be used sparingly for batch lookup of all needed identifiers. Clients should work in terms of local identifiers and call these methods only once after loading from and before saving to persistent storage.  If the attempt to lookup a local identifier for a given cloud identifier fails, the error parameter will indicate the reason.
- @param cloudIdentifiers The array of \c PHCloudIdentifier instances whose local identifiers are to being requested.
- */
-- (NSDictionary <PHCloudIdentifier *, PHLocalIdentifierMapping *> *)localIdentifierMappingsForCloudIdentifiers:(NSArray<PHCloudIdentifier *> *)cloudIdentifiers API_AVAILABLE(macos(12), ios(15), tvos(15)) NS_REFINED_FOR_SWIFT;
-
-/**
- @abstract Returns a dictionary that maps each local identifier from the provided array to a PLCloudIdentifierMapping result containing the cloud identifier found for that local identifier
- @discussion This method can be very expensive so they should be used sparingly for batch lookup of all needed identifiers. Clients should work in terms of local identifiers and call these methods only once after loading from and before saving to persistent storage.  If the attempt to lookup a cloud identifier for a given local identifier fails, the error parameter will indicate the reason.
- @param localIdentifiers The array of \c NSString instances whose cloud identifiers are to being requested.
- */
-- (NSDictionary <NSString *, PHCloudIdentifierMapping *> *)cloudIdentifierMappingsForLocalIdentifiers:(NSArray<NSString *> *)localIdentifiers API_AVAILABLE(macos(12), ios(15), tvos(15)) NS_REFINED_FOR_SWIFT;
-
-/// DEPRECATED: These two methods can be very expensive so they should be used sparingly for batch lookup of all needed identifiers. Clients should work in terms of local identifiers and call these methods only once after loading from and before saving to persistent storage.
-- (NSArray<NSString *> *)localIdentifiersForCloudIdentifiers:(NSArray<PHCloudIdentifier *> *)cloudIdentifiers
-
-API_DEPRECATED_WITH_REPLACEMENT("-localIdentifierMappingsForCloudIdentifiers:", macos(10.13, 12)) API_UNAVAILABLE(ios, macCatalyst, tvos);
-
-- (NSArray<PHCloudIdentifier *> *)cloudIdentifiersForLocalIdentifiers:(NSArray<NSString *> *)localIdentifiers
-
-API_DEPRECATED_WITH_REPLACEMENT("-cloudIdentifierMappingsForLocalIdentifiers:", macos(10.13, 12)) API_UNAVAILABLE(ios, macCatalyst, tvos);
-
+/// These two methods can be very expensive so they should be used sparingly for batch lookup of all needed identifiers. Clients should work in terms of local identifiers and call these methods only once after loading from and before saving to persistent storage.
+- (NSArray<NSString *> *)localIdentifiersForCloudIdentifiers:(NSArray<PHCloudIdentifier *> *)cloudIdentifiers;
+- (NSArray<PHCloudIdentifier *> *)cloudIdentifiersForLocalIdentifiers:(NSArray<NSString *> *)localIdentifiers;
 
 @end
 
-/// DEPRECATED: If the local object cannot be resolved from a global identifier, PHLocalIdentifierNotFound is provided in that array slot.
-extern NSString * const PHLocalIdentifierNotFound
+/// If the local object cannot be resolved from a global identifier, PHLocalIdentifierNotFound is provided in that array slot.
+extern NSString * const PHLocalIdentifierNotFound;
 
-API_DEPRECATED_WITH_REPLACEMENT("Check for PHPhotosErrorIdentifierNotFound in PHLocalIdentifierMapping.error", macos(10.13, 12)) API_UNAVAILABLE(ios, macCatalyst, tvos);
 
+API_UNAVAILABLE_END
 
 API_AVAILABLE_END
 NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHError.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHError.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHError.h	2021-08-07 08:52:00.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHError.h	2021-08-03 21:52:06.000000000 -0400
@@ -11,31 +11,13 @@
 
 OS_EXPORT NSErrorDomain const PHPhotosErrorDomain;
 
-/// Array of NSString values representing local identifiers related to the specific error
-extern NSErrorUserInfoKey const PHLocalIdentifiersErrorKey API_AVAILABLE(macos(12), ios(15), tvos(15));
-
 typedef NS_ERROR_ENUM(PHPhotosErrorDomain, PHPhotosError) {
-    PHPhotosErrorInternalError API_AVAILABLE(macos(10.15), ios(13), tvos(13)) = -1, // An unknown, internal error occured
-
-    PHPhotosErrorUserCancelled = 3072, // The user cancelled the asset resource or editing request
-    PHPhotosErrorLibraryVolumeOffline = 3114, // The photo library is unavailable because the file system volume that contains it is not mounted (register for PHPhotoLibraryAvailabilityObserver)
-    PHPhotosErrorRelinquishingLibraryBundleToWriter = 3142, // The photo library became unavailable because the user moved, renamed, or deleted the system photo library (register for PHPhotoLibraryAvailabilityObserver)
-    PHPhotosErrorSwitchingSystemPhotoLibrary = 3143, // The photo library became unavailable because the user switched the system photo library (register for PHPhotoLibraryAvailabilityObserver)
-    PHPhotosErrorNetworkAccessRequired API_AVAILABLE(macos(11.0), ios(14), tvos(14)) = 3164, // The request for an asset resource failed because network access is required, set networkAccessAllowed = YES to enable network access
-    PHPhotosErrorIdentifierNotFound API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3201, // Identifier was not found
-    PHPhotosErrorMultipleIdentifiersFound API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3202, // More than one identifier was found
-
-    PHPhotosErrorChangeNotSupported API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3300, // The change request is not supported as configured
-    PHPhotosErrorOperationInterrupted API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3301, // Operation was interrupted and could not be completed, transient error
-    PHPhotosErrorInvalidResource API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3302, // Asset resource validation failed
-    PHPhotosErrorMissingResource API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3303, // Asset resource missing
-    PHPhotosErrorNotEnoughSpace API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3305, // Not enough space to perform the requested change
-    PHPhotosErrorRequestNotSupportedForAsset API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3306, // The request could not be completed because it is not supported for the specified asset
-    
-    PHPhotosErrorAccessRestricted API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3310, // Access restricted by system configuration
-    PHPhotosErrorAccessUserDenied API_AVAILABLE(macos(12), ios(15), tvos(15)) = 3311, // The user has denied access
-
-    PHPhotosErrorInvalid API_DEPRECATED_WITH_REPLACEMENT("PHPhotosErrorInternalError", macos(10.15, 12), ios(13, 15), tvos(13, 15)) = -1, // DEPRECATED An unknown error occured
+    PHPhotosErrorInvalid = -1,
+    PHPhotosErrorUserCancelled = 3072,
+    PHPhotosErrorLibraryVolumeOffline = 3114,
+    PHPhotosErrorRelinquishingLibraryBundleToWriter = 3142,
+    PHPhotosErrorSwitchingSystemPhotoLibrary = 3143,
+    PHPhotosErrorNetworkAccessRequired API_AVAILABLE(macos(11.0), ios(14), tvos(14)) = 3164,
 };
 
 #ifdef __swift__
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHLivePhotoEditingContext.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHLivePhotoEditingContext.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHLivePhotoEditingContext.h	2021-08-07 08:51:59.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHLivePhotoEditingContext.h	2021-08-03 21:52:05.000000000 -0400
@@ -65,11 +65,11 @@
 
 /// Asynchronously generate a new live photo suitable for playback in a PHLivePhotoView of the specified target size
 /// The options dictionary can contain additional options, see below
-- (void)prepareLivePhotoForPlaybackWithTargetSize:(CGSize)targetSize options:(nullable NSDictionary<PHLivePhotoEditingOption, id> *)options completionHandler:(void(^)(PHLivePhoto * _Nullable livePhoto, NSError * _Nullable error))handler NS_SWIFT_ASYNC_NAME(livePhotoForPlayback(targetSize:options:));
+- (void)prepareLivePhotoForPlaybackWithTargetSize:(CGSize)targetSize options:(nullable NSDictionary<PHLivePhotoEditingOption, id> *)options completionHandler:(void(^)(PHLivePhoto * _Nullable livePhoto, NSError * _Nullable error))handler;
 
 /// Asynchronously process and save the edited live photo to the specified content editing output
 /// Options dictionary should be nil, reserved for future expansion
-- (void)saveLivePhotoToOutput:(PHContentEditingOutput *)output options:(nullable NSDictionary<PHLivePhotoEditingOption, id> *)options completionHandler:(void(^)(BOOL success, NSError * _Nullable error))handler NS_SWIFT_ASYNC_THROWS_ON_FALSE(1);
+- (void)saveLivePhotoToOutput:(PHContentEditingOutput *)output options:(nullable NSDictionary<PHLivePhotoEditingOption, id> *)options completionHandler:(void(^)(BOOL success, NSError * _Nullable error))handler;
 
 /// Cancel the current asynchronous operation
 /// This is implicitly called whenever prepare or save is called
@@ -123,7 +123,7 @@
 
 /// Error code for Live Photo Editing errors (Deprecated)
 typedef NS_ENUM(NSInteger, PHLivePhotoEditingErrorCode) {
-    PHLivePhotoEditingErrorCodeUnknown API_DEPRECATED_WITH_REPLACEMENT("PHPhotosErrorInternalError", macos(10.12, 10.15)),
+    PHLivePhotoEditingErrorCodeUnknown API_DEPRECATED_WITH_REPLACEMENT("PHPhotosErrorInvalid", macos(10.12, 10.15)),
     PHLivePhotoEditingErrorCodeAborted API_DEPRECATED_WITH_REPLACEMENT("PHPhotosErrorUserCancelled", macos(10.12, 10.15)),
 } API_UNAVAILABLE(ios, tvos, macCatalyst);
 
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHPhotoLibrary.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHPhotoLibrary.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHPhotoLibrary.h	2021-08-09 03:25:57.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PHPhotoLibrary.h	2021-08-03 21:52:06.000000000 -0400
@@ -59,7 +59,7 @@
 
 /// Replaces \c +authorizationStatus to support add-only/read-write access level status
 + (PHAuthorizationStatus)authorizationStatusForAccessLevel:(PHAccessLevel)accessLevel API_AVAILABLE(macosx(11.0), ios(14), tvos(14));
-+ (void)requestAuthorizationForAccessLevel:(PHAccessLevel)accessLevel handler:(void(^)(PHAuthorizationStatus status))handler API_AVAILABLE(macosx(11.0), ios(14), tvos(14)) NS_SWIFT_ASYNC(2);
++ (void)requestAuthorizationForAccessLevel:(PHAccessLevel)accessLevel handler:(void(^)(PHAuthorizationStatus status))handler API_AVAILABLE(macosx(11.0), ios(14), tvos(14));
 
 /// Deprecated and replaced by authorizationStatusForAccessLevel:, will return \c PHAuthorizationStatusAuthorized if the user has chosen limited photo library access
 + (PHAuthorizationStatus)authorizationStatus API_DEPRECATED_WITH_REPLACEMENT("+authorizationStatusForAccessLevel:", ios(8, API_TO_BE_DEPRECATED), macos(10.13, API_TO_BE_DEPRECATED), tvos(10, API_TO_BE_DEPRECATED));
@@ -76,7 +76,7 @@
 
 // handlers are invoked on an arbitrary serial queue
 // Nesting change requests will throw an exception
-- (void)performChanges:(dispatch_block_t)changeBlock completionHandler:(nullable void(^)(BOOL success, NSError *__nullable error))completionHandler NS_SWIFT_ASYNC_THROWS_ON_FALSE(1);
+- (void)performChanges:(dispatch_block_t)changeBlock completionHandler:(nullable void(^)(BOOL success, NSError *__nullable error))completionHandler;
 - (BOOL)performChangesAndWait:(dispatch_block_t)changeBlock error:(NSError *__autoreleasing *)error;
 
 #pragma mark - Change Handling
diff -ruN /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PhotosTypes.h /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PhotosTypes.h
--- /Applications/Xcode_13.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PhotosTypes.h	2021-08-07 08:54:52.000000000 -0400
+++ /Applications/Xcode_13.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Photos.framework/Headers/PhotosTypes.h	2021-08-03 21:52:07.000000000 -0400
@@ -99,7 +99,6 @@
     PHAssetCollectionSubtypeSmartAlbumAnimated API_AVAILABLE(macos(10.15), ios(11), tvos(11)) = 214,
     PHAssetCollectionSubtypeSmartAlbumLongExposures API_AVAILABLE(macos(10.15), ios(11), tvos(11)) = 215,
     PHAssetCollectionSubtypeSmartAlbumUnableToUpload API_AVAILABLE(macos(10.15), ios(13), tvos(13)) = 216,
-    PHAssetCollectionSubtypeSmartAlbumRAW API_AVAILABLE(macos(12), ios(15), tvos(15)) = 217,
 
     // Used for fetching, if you don't care about the exact subtype
     PHAssetCollectionSubtypeAny = NSIntegerMax
Clone this wiki locally