Commit 92d6f8eb authored by Roy Marmelstein's avatar Roy Marmelstein

Merge branch 'swift3.0'

# Conflicts:
#	Zip/ZipUtilities.swift
parents 7437d31d bcb5d05d
# MacOS
.DS_Store
# Xcode
#
build/
......
osx_image: xcode7.2
osx_image: xcode8
language: objective-c
env:
global:
- LC_CTYPE=en_US.UTF-8
- LANG=en_US.UTF-8
before_install:
- brew update || brew update
- brew outdated xctool || brew upgrade xctool
- gem install cocoapods
- xcrun simctl list
- gem install cocoapods --pre
install: echo "<3"
env:
- MODE=framework
......
![Zip - Zip and unzip files in Swift](https://cloud.githubusercontent.com/assets/889949/12374908/252373d0-bcac-11e5-8ece-6933aeae8222.png)
[![Build Status](https://travis-ci.org/marmelroy/Zip.svg?branch=master)](https://travis-ci.org/marmelroy/Zip) [![Version](http://img.shields.io/cocoapods/v/Zip.svg)](http://cocoapods.org/?q=Zip)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
# Zip
A Swift framework for zipping and unzipping files. Simple and quick to use. Built on top of [minizip](https://github.com/nmoinvaz/minizip).
......@@ -58,26 +57,8 @@ Zip supports '.zip' and '.cbz' files out of the box. To support additional zip-d
Zip.addCustomFileExtension("file-extension-here")
```
### Setting up with Carthage
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
```bash
$ brew update
$ brew install carthage
```
To integrate Format into your Xcode project using Carthage, specify it in your `Cartfile`:
```ogdl
github "marmelroy/Zip"
```
### Setting up with [CocoaPods](http://cocoapods.org/?q=Zip)
```ruby
source 'https://github.com/CocoaPods/Specs.git'
pod 'Zip', '~> 0.4'
pod 'Zip', '~> 0.5', :submodules => true
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.4.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>7</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
......@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = "Zip"
s.version = "0.4.3"
s.version = "0.5"
s.summary = "Zip and unzip files in Swift."
# This description is used to generate tags and improve search results.
......
......@@ -133,7 +133,6 @@
/* Begin PBXFileReference section */
342545B51CE525B200336074 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
342545B61CE525B300336074 /* Zip copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Zip copy-Info.plist"; path = "/Users/marmelroy/Documents/Projects/OpenSource/Zip/Zip copy-Info.plist"; sourceTree = "<absolute>"; };
342FC0D21C5044DC0023A3C3 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
342FC0D31C5044DC0023A3C3 /* aes_via_ace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes_via_ace.h; sourceTree = "<group>"; };
342FC0D41C5044DC0023A3C3 /* aescrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aescrypt.c; sourceTree = "<group>"; };
......@@ -275,7 +274,6 @@
347E3A761C1DFFB500A11FD3 /* Zip */,
347E3A821C1DFFB500A11FD3 /* ZipTests */,
347E3A751C1DFFB500A11FD3 /* Products */,
342545B61CE525B300336074 /* Zip copy-Info.plist */,
);
sourceTree = "<group>";
};
......@@ -493,7 +491,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
LastUpgradeCheck = 0720;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = "Roy Marmelstein";
TargetAttributes = {
343F50FE1C8DAEEC0028C434 = {
......@@ -504,9 +502,11 @@
};
347E3A731C1DFFB500A11FD3 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
};
347E3A7D1C1DFFB500A11FD3 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
};
};
};
......@@ -677,9 +677,9 @@
CLANG_ENABLE_MODULES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = "Zip copy-Info.plist";
INFOPLIST_FILE = "Zip/Info-tvOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
......@@ -702,9 +702,9 @@
CLANG_ENABLE_MODULES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = "Zip copy-Info.plist";
INFOPLIST_FILE = "Zip/Info-tvOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
......@@ -714,6 +714,7 @@
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
};
......@@ -724,10 +725,10 @@
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
FRAMEWORK_VERSION = A;
INFOPLIST_FILE = Zip/Info.plist;
......@@ -747,10 +748,10 @@
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
FRAMEWORK_VERSION = A;
INFOPLIST_FILE = Zip/Info.plist;
......@@ -762,6 +763,7 @@
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
......@@ -812,7 +814,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
......@@ -835,6 +837,7 @@
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
......@@ -860,7 +863,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
......@@ -875,6 +878,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
......@@ -889,7 +893,7 @@
CLANG_ENABLE_MODULES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Zip/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
......@@ -911,7 +915,7 @@
CLANG_ENABLE_MODULES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 7;
DYLIB_CURRENT_VERSION = 8;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Zip/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
......@@ -922,6 +926,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_INCLUDE_PATHS = "${SRCROOT}/Zip/minizip/**";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
......@@ -942,6 +947,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.roymarmelstein.ZipTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0730"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
......@@ -15,11 +15,11 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.4.1</string>
<string>0.5.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>6</string>
<string>8</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
......
......@@ -15,11 +15,11 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.4.3</string>
<string>0.5.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>7</string>
<string>8</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
......
......@@ -21,7 +21,7 @@ extension Zip {
- returns: NSURL of the destination folder.
*/
public class func quickUnzipFile(path: NSURL) throws -> NSURL {
public class func quickUnzipFile(_ path: URL) throws -> URL {
return try quickUnzipFile(path, progress: nil)
}
......@@ -37,16 +37,21 @@ extension Zip {
- returns: NSURL of the destination folder.
*/
public class func quickUnzipFile(path: NSURL, progress: ((progress: Double) -> ())?) throws -> NSURL {
let fileManager = NSFileManager.defaultManager()
guard let fileExtension = path.pathExtension, let fileName = path.lastPathComponent else {
throw ZipError.UnzipFail
public class func quickUnzipFile(_ path: URL, progress: ((_ progress: Double) -> ())?) throws -> URL {
let fileManager = FileManager.default
let fileExtension = path.pathExtension
let fileName = path.lastPathComponent
let directoryName = fileName.replacingOccurrences(of: ".\(fileExtension)", with: "")
let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
do {
let destinationUrl = documentsUrl.appendingPathComponent(directoryName, isDirectory: true)
try self.unzipFile(path, destination: destinationUrl, overwrite: true, password: nil, progress: progress)
return destinationUrl
}catch{
throw(ZipError.unzipFail)
}
let directoryName = fileName.stringByReplacingOccurrencesOfString(".\(fileExtension)", withString: "")
let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let destinationUrl = documentsUrl.URLByAppendingPathComponent(directoryName, isDirectory: true)
try self.unzipFile(path, destination: destinationUrl, overwrite: true, password: nil, progress: progress)
return destinationUrl
}
//MARK: Quick Zip
......@@ -63,7 +68,7 @@ extension Zip {
- returns: NSURL of the destination folder.
*/
public class func quickZipFiles(paths: [NSURL], fileName: String) throws -> NSURL {
public class func quickZipFiles(_ paths: [URL], fileName: String) throws -> URL {
return try quickZipFiles(paths, fileName: fileName, progress: nil)
}
......@@ -80,13 +85,13 @@ extension Zip {
- returns: NSURL of the destination folder.
*/
public class func quickZipFiles(paths: [NSURL], fileName: String, progress: ((progress: Double) -> ())?) throws -> NSURL {
let fileManager = NSFileManager.defaultManager()
let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let destinationUrl = documentsUrl.URLByAppendingPathComponent("\(fileName).zip")
public class func quickZipFiles(_ paths: [URL], fileName: String, progress: ((_ progress: Double) -> ())?) throws -> URL {
let fileManager = FileManager.default
let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
let destinationUrl = documentsUrl.appendingPathComponent("\(fileName).zip")
try self.zipFiles(paths, zipFilePath: destinationUrl, password: nil, progress: progress)
return destinationUrl
}
}
\ No newline at end of file
}
This diff is collapsed.
......@@ -11,22 +11,17 @@ import Foundation
internal class ZipUtilities {
// File manager
let fileManager = NSFileManager.defaultManager()
let fileManager = FileManager.default
/**
* ProcessedFilePath struct
*/
internal struct ProcessedFilePath {
let filePathURL: NSURL
let filePathURL: URL
let fileName: String?
func filePath() -> String {
if let filePath = filePathURL.path {
return filePath
}
else {
return String()
}
return filePathURL.path
}
}
......@@ -39,21 +34,19 @@ internal class ZipUtilities {
- returns: Array of ProcessedFilePath structs.
*/
internal func processZipPaths(paths: [NSURL]) -> [ProcessedFilePath]{
internal func processZipPaths(_ paths: [URL]) -> [ProcessedFilePath]{
var processedFilePaths = [ProcessedFilePath]()
for path in paths {
guard let filePath = path.path else {
continue
}
let filePath = path.path
var isDirectory: ObjCBool = false
fileManager.fileExistsAtPath(filePath, isDirectory: &isDirectory)
if !isDirectory {
fileManager.fileExists(atPath: filePath, isDirectory: &isDirectory)
if !isDirectory.boolValue {
let processedPath = ProcessedFilePath(filePathURL: path, fileName: path.lastPathComponent)
processedFilePaths.append(processedPath)
}
else {
let directoryContents = expandDirectoryFilePath(path)
processedFilePaths.appendContentsOf(directoryContents)
processedFilePaths.append(contentsOf: directoryContents)
}
}
return processedFilePaths
......@@ -67,27 +60,25 @@ internal class ZipUtilities {
- returns: Array of ProcessedFilePath structs.
*/
internal func expandDirectoryFilePath(directory: NSURL) -> [ProcessedFilePath] {
internal func expandDirectoryFilePath(_ directory: URL) -> [ProcessedFilePath] {
var processedFilePaths = [ProcessedFilePath]()
if let directoryPath = directory.path, let enumerator = fileManager.enumeratorAtPath(directoryPath) {
let directoryPath = directory.path
if let enumerator = fileManager.enumerator(atPath: directoryPath) {
while let filePathComponent = enumerator.nextObject() as? String {
let path = directory.URLByAppendingPathComponent(filePathComponent)
guard let filePath = path.path, let directoryName = directory.lastPathComponent else {
continue
}
let path = directory.appendingPathComponent(filePathComponent)
let filePath = path.path
let directoryName = directory.lastPathComponent
var isDirectory: ObjCBool = false
fileManager.fileExistsAtPath(filePath, isDirectory: &isDirectory)
if !isDirectory {
let fileName = (directoryName as NSString).stringByAppendingPathComponent(filePathComponent)
fileManager.fileExists(atPath: filePath, isDirectory: &isDirectory)
if !isDirectory.boolValue {
let fileName = (directoryName as NSString).appendingPathComponent(filePathComponent)
let processedPath = ProcessedFilePath(filePathURL: path, fileName: fileName)
processedFilePaths.append(processedPath)
}
else {
let directoryContents = expandDirectoryFilePath(path)
}
}
}
return processedFilePaths
}
}
\ No newline at end of file
}
......@@ -15,10 +15,10 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>0.4.3</string>
<string>0.5.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>7</string>
<string>8</string>
</dict>
</plist>
This diff is collapsed.
#!/bin/bash
# **** Update me when new Xcode versions are released! ****
PLATFORM="platform=iOS Simulator,OS=9.2,name=iPhone 6"
SDK="iphonesimulator9.2"
PLATFORM="platform=iOS Simulator,OS=10.0,name=iPhone 7"
SDK="iphonesimulator10.0"
# It is pitch black.
......@@ -19,12 +19,12 @@ MODE="$1"
if [ "$MODE" = "framework" ]; then
echo "Building and testing Zip."
xctool \
xcodebuild \
-project Zip.xcodeproj \
-scheme Zip \
-sdk "$SDK" \
-destination "$PLATFORM" \
build test
test
trap - EXIT
exit 0
fi
......@@ -35,12 +35,11 @@ if [ "$MODE" = "examples" ]; then
for example in examples/*/; do
echo "Building $example."
pod install --project-directory=$example
xctool \
xcodebuild \
-workspace "${example}Sample.xcworkspace" \
-scheme Sample \
-sdk "$SDK" \
-destination "$PLATFORM" \
build
-destination "$PLATFORM"
done
trap - EXIT
exit 0
......
......@@ -167,14 +167,16 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
LastUpgradeCheck = 0720;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = "Roy Marmelstein";
TargetAttributes = {
3430F66C1C45C930007473A6 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
};
3430F6801C45C930007473A6 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
TestTargetID = 3430F66C1C45C930007473A6;
};
};
......@@ -283,8 +285,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
......@@ -311,6 +315,7 @@
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
......@@ -327,8 +332,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
......@@ -347,6 +354,8 @@
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
VALIDATE_PRODUCT = YES;
};
name = Release;
......@@ -354,6 +363,7 @@
3430F68B1C45C930007473A6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = Sample/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
......@@ -365,6 +375,7 @@
3430F68C1C45C930007473A6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = Sample/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
......@@ -13,46 +13,45 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if NSUserDefaults.standardUserDefaults().boolForKey("firstLaunch") == false {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstLaunch")
NSUserDefaults.standardUserDefaults().synchronize()
let fileManager = NSFileManager.defaultManager()
func applicationDidFinishLaunching(_ application: UIApplication) {
if UserDefaults.standard.bool(forKey: "firstLaunch") == false {
UserDefaults.standard.set(true, forKey: "firstLaunch")
UserDefaults.standard.synchronize()
let fileManager = FileManager.default
let fileNames = ["Image1.jpg", "Image2.jpg", "Image3.jpg", "Images.zip"]
let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let bundleUrl = NSBundle.mainBundle().resourceURL
let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
let bundleUrl = Bundle.main.resourceURL
for file in fileNames {
if let srcPath = bundleUrl?.URLByAppendingPathComponent(file).path, let toPath = documentsUrl.URLByAppendingPathComponent(file).path{
if let srcPath = bundleUrl?.appendingPathComponent(file).path{
let toPath = documentsUrl.appendingPathComponent(file).path
do {
try fileManager.copyItemAtPath(srcPath, toPath: toPath)
try fileManager.copyItem(atPath: srcPath, toPath: toPath)
} catch {}
}
}
}
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(application: UIApplication) {
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(application: UIApplication) {
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(application: UIApplication) {
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(application: UIApplication) {
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(application: UIApplication) {
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
......
......@@ -17,9 +17,9 @@ class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var zipButton: UIBarButtonItem!
@IBOutlet weak var unzipButton: UIBarButtonItem!
let fileManager = NSFileManager.defaultManager()
let fileManager = FileManager.default
var path: NSURL? {
var path: URL? {
didSet {
updateFiles()
}
......@@ -34,7 +34,7 @@ class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate
override func viewDidLoad() {
if self.path == nil {
let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL
self.path = documentsUrl
}
updateSelection()
......@@ -47,65 +47,65 @@ class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate
var tempFiles = [String]()
do {
self.title = filePath.lastPathComponent
tempFiles = try self.fileManager.contentsOfDirectoryAtPath(filePath.path!)
tempFiles = try self.fileManager.contentsOfDirectory(atPath: filePath.path)
} catch {
if path == "/System" {
if filePath.path == "/System" {
tempFiles = ["Library"]
}
if path == "/Library" {
if filePath.path == "/Library" {
tempFiles = ["Preferences"]
}
if path == "/var" {
if filePath.path == "/var" {
tempFiles = ["mobile"]
}
if path == "/usr" {
if filePath.path == "/usr" {
tempFiles = ["lib", "libexec", "bin"]
}
}
self.files = tempFiles.sort(){$0 < $1}
self.files = tempFiles.sorted(){$0 < $1}
tableView.reloadData()
}
}
//MARK: UITableView Data Source and Delegate
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return files.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "FileCell"
var cell = UITableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
if let reuseCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) {
var cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier)
if let reuseCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) {
cell = reuseCell
}
guard let path = path else {
return cell
}
cell.selectionStyle = .None
let filePath = files[indexPath.row]
let newPath = path.URLByAppendingPathComponent(filePath).path!
cell.selectionStyle = .none
let filePath = files[(indexPath as NSIndexPath).row]
let newPath = path.appendingPathComponent(filePath).path
var isDirectory: ObjCBool = false
fileManager.fileExistsAtPath(newPath, isDirectory: &isDirectory)
cell.textLabel?.text = files[indexPath.row]
if isDirectory {
fileManager.fileExists(atPath: newPath, isDirectory: &isDirectory)
cell.textLabel?.text = files[(indexPath as NSIndexPath).row]
if isDirectory.boolValue {
cell.imageView?.image = UIImage(named: "Folder")
}
else {
cell.imageView?.image = UIImage(named: "File")
}
cell.backgroundColor = (selectedFiles.contains(filePath)) ? UIColor(white: 0.9, alpha: 1.0):UIColor.whiteColor()
cell.backgroundColor = (selectedFiles.contains(filePath)) ? UIColor(white: 0.9, alpha: 1.0):UIColor.white
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let filePath = files[indexPath.row]
if let index = selectedFiles.indexOf(filePath) where selectedFiles.contains(filePath) {
selectedFiles.removeAtIndex(index)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let filePath = files[(indexPath as NSIndexPath).row]
if let index = selectedFiles.index(of: filePath) , selectedFiles.contains(filePath) {
selectedFiles.remove(at: index)
}
else {
selectedFiles.append(filePath)
......@@ -117,29 +117,29 @@ class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate
tableView.reloadData()
selectionCounter.title = "\(selectedFiles.count) Selected"
zipButton.enabled = (selectedFiles.count > 0)
zipButton.isEnabled = (selectedFiles.count > 0)
if (selectedFiles.count == 1) {
let filePath = selectedFiles.first
let pathExtension = path!.URLByAppendingPathComponent(filePath!).pathExtension
let pathExtension = path!.appendingPathComponent(filePath!).pathExtension
if pathExtension == "zip" {
unzipButton.enabled = true
unzipButton.isEnabled = true
}
else {
unzipButton.enabled = false
unzipButton.isEnabled = false
}
}
else {
unzipButton.enabled = false
unzipButton.isEnabled = false
}
}
//MARK: Actions
@IBAction func unzipSelection(sender: AnyObject) {
@IBAction func unzipSelection(_ sender: AnyObject) {
let filePath = selectedFiles.first
let pathURL = path!.URLByAppendingPathComponent(filePath!)
let pathURL = path!.appendingPathComponent(filePath!)
do {
try Zip.quickUnzipFile(pathURL)
let _ = try Zip.quickUnzipFile(pathURL)
self.selectedFiles.removeAll()
updateSelection()
updateFiles()
......@@ -148,13 +148,13 @@ class FileBrowser: UIViewController, UITableViewDataSource, UITableViewDelegate
}
}
@IBAction func zipSelection(sender: AnyObject) {
var urlPaths = [NSURL]()
@IBAction func zipSelection(_ sender: AnyObject) {
var urlPaths = [URL]()
for filePath in selectedFiles {
urlPaths.append(path!.URLByAppendingPathComponent(filePath))
urlPaths.append(path!.appendingPathComponent(filePath))
}
do {
try Zip.quickZipFiles(urlPaths, fileName: "Archive")
let _ = try Zip.quickZipFiles(urlPaths, fileName: "Archive")
self.selectedFiles.removeAll()
updateSelection()
updateFiles()
......
......@@ -28,7 +28,7 @@ class SampleTests: XCTestCase {
func testPerformanceExample() {
// This is an example of a performance test case.
self.measureBlock {
self.measure {
// Put the code you want to measure the time of here.
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment