This library handles file extended attributes by extending URL
struct.
- Swift 4.0 or higher
- macOS, iOS, tvOS or Linux
- XCode 9.0
First you must clone this project from github:
git clone https://github.com/amosavian/ExtendedAttributes
Then you can either install manually by adding Sources/ExtendedAttributes
directory to your project
or create a xcodeproj
file and add it as a dynamic framework:
swift package generate-xcodeproj
Extended attributes only work with urls that begins with file:///
.
To get which extended attributes are set for file:
do {
print(try url.listExtendedAttributes())
} catch {
print(error.localizedDescription)
}
To check either a specific extended attribute exists or not:
if url.hasExtendedAttribute(forName: "eaName") {
// Do something
}
To retrieve raw data for an extended attribute, simply use this code as template, Please note if extended attribute doesn't exist, it will throw an error.
do {
let data = try url.extendedAttribute(forName: "eaName")
print(data as NSData)
} catch {
print(error.localizedDescription)
}
You can retrieve values of extended attributes if they are set with standard plist binary format. This can be String
, Int
/NSNumber
, Double
, Bool
, URL
, Date
, Array
or Dictionary
. Arrays should not contain nil
value.
To retrieve raw data for an extended attribute, simply use this code as template:
do {
let notes: String = try url.extendedAttributeValue(forName: "notes")
print("Notes:", notes)
let isDownloeded: Bool = try url.extendedAttributeValue(forName: "isdownloaded")
print("isDownloaded:", isDownloeded)
let originURL: URL = try url.extendedAttributeValue(forName: "originurl")
print("Original url:", originurl)
} catch {
print(error.localizedDescription)
}
or to list all values of a file:
do {
for name in try url.listExtendedAttributes() {
let value = try url.extendedAttributeValue(forName: name)
print(name, ":" , value)
}
} catch {
print(error.localizedDescription)
}
To set raw data for an extended attribute:
do {
try url.setExtendedAttribute(data: Data(bytes: [0xFF, 0x20]), forName: "data")
} catch {
print(error.localizedDescription)
}
To set a value for an extended attribute:
do {
let dictionary: [String: Any] = ["name": "Amir", "age": 30]
try url.setExtendedAttribute(value: dictionary, forName: "identity")
} catch {
print(error.localizedDescription)
}
To remove an extended attribute:
do {
try url.removeExtendedAttribute(forName: "identity")
} catch {
print(error.localizedDescription)
}
Check Issues page.
We would love for you to contribute to ExtendedAttributes, check the LICENSE file for more info.