This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended. To summarise this work: - [x] created a new **Xcode** project; - [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project; - [x] created the `Locations` app and also, its `Libraries` package; - [x] created the `Shared` package to share dependencies between the apps; - [x] added a `Makefile` file and implemented some **environment** and **help** commands. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: rock-n-code/deep-linking-assignment#1
37 lines
1.5 KiB
Swift
37 lines
1.5 KiB
Swift
import Foundation
|
|
|
|
@objc public extension FileManager {
|
|
@objc func sizeOfDirectory(at url: URL) -> Int64 {
|
|
var size: Int64 = 0
|
|
let prefetchedProperties: [URLResourceKey] = [.isRegularFileKey, .fileAllocatedSizeKey, .totalFileAllocatedSizeKey]
|
|
if let enumerator = self.enumerator(at: url, includingPropertiesForKeys: prefetchedProperties) {
|
|
for item in enumerator {
|
|
guard let itemURL = item as? NSURL else {
|
|
continue
|
|
}
|
|
let resourceValueForKey: (URLResourceKey) -> NSNumber? = { key in
|
|
var value: AnyObject? = nil
|
|
try? itemURL.getResourceValue(&value, forKey: key)
|
|
return value as? NSNumber
|
|
}
|
|
|
|
guard let isRegularFile = resourceValueForKey(URLResourceKey.isRegularFileKey)?.boolValue else {
|
|
continue
|
|
}
|
|
|
|
guard isRegularFile else {
|
|
continue
|
|
}
|
|
|
|
let fileSize = resourceValueForKey(URLResourceKey.totalFileAllocatedSizeKey) ?? resourceValueForKey(URLResourceKey.fileAllocatedSizeKey)
|
|
guard let allocatedSize = fileSize?.int64Value else {
|
|
assertionFailure("URLResourceKey.fileAllocatedSizeKey should always return a value")
|
|
return size
|
|
}
|
|
size += allocatedSize
|
|
}
|
|
}
|
|
return size
|
|
}
|
|
}
|