The minimal changes for PMK2 to build /w Swift 2.3

Closes #501
This commit is contained in:
Max Howell 2016-08-14 16:01:58 -07:00
parent a1e71f4ec0
commit bd158b463a
17 changed files with 72 additions and 66 deletions

View File

@ -1,20 +1,8 @@
language: objective-c
xcode_project: PromiseKit.xcodeproj
xcode_scheme: [PMKOSX]
xcode_sdk: [macosx10.11]
osx_image: xcode7.3
install:
- "carthage bootstrap --platform Mac"
matrix:
exclude:
- xcode_scheme: PMKOSX
xcode_sdk: iphonesimulator9.3
branches:
only:
- master
- swift-2.2-minimal-changes
- swift-2.0-minimal-changes
- legacy-1.x
xcode_sdk: [macosx]
osx_image: xcode8
env: TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3
install: carthage bootstrap --platform Mac
script: set -o pipefail && xcodebuild -scheme PMKOSX test | xcpretty

View File

@ -1,3 +1,3 @@
github "kif-framework/KIF" == 3.4.2
github "AliSoftware/OHHTTPStubs" == 5.1.0
github "mxcl/OHHTTPStubs" "swift-3.0"
github "robb/Stubbilino" == 0.2.1

View File

@ -4,7 +4,7 @@
// Created by Matthew Loseke on 6/21/14.
//
#import <AVFoundation/AVAudioSession.h>
#import <AVFoundation/AVFoundation.h>
#import <PromiseKit/AnyPromise.h>
/**

View File

@ -1,4 +1,4 @@
import AVFoundation.AVAudioSession
import AVFoundation
import Foundation
#if !COCOAPODS
import PromiseKit

View File

@ -77,15 +77,9 @@ extension CLLocationManager {
private class LocationManager: CLLocationManager, CLLocationManagerDelegate {
let (promise, fulfill, reject) = Promise<[CLLocation]>.defer_()
#if os(iOS)
@objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
fulfill(locations)
}
#else
@objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
fulfill(locations as! [CLLocation])
}
#endif
@objc func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
reject(error)
@ -118,10 +112,11 @@ private class AuthorizationCatcher: CLLocationManager, CLLocationManagerDelegate
}
#endif
private func auther(requestAuthorizationType: CLLocationManager.RequestAuthorizationType)(manager: CLLocationManager)
private func auther(requestAuthorizationType: CLLocationManager.RequestAuthorizationType) -> (manager: CLLocationManager) -> Void
{
#if os(iOS)
if !manager.respondsToSelector("requestWhenInUseAuthorization") { return }
return { manager in
if !manager.respondsToSelector(#selector(CLLocationManager.requestWhenInUseAuthorization)) { return }
func hasInfoPListKey(key: String) -> Bool {
let value = NSBundle.mainBundle().objectForInfoDictionaryKey(key) as? String ?? ""
@ -146,6 +141,9 @@ private func auther(requestAuthorizationType: CLLocationManager.RequestAuthoriza
break
}
}
#else
return { _ in }
#endif
}

View File

@ -38,13 +38,13 @@ private class PMKMailComposeViewControllerDelegate: NSObject, MFMailComposeViewC
if let error = error {
reject(error)
} else {
switch result.rawValue {
case MFMailComposeResultFailed.rawValue:
switch result {
case .Failed:
var info = [NSObject: AnyObject]()
info[NSLocalizedDescriptionKey] = "The attempt to save or send the message was unsuccessful."
info[NSUnderlyingErrorKey] = NSNumber(unsignedInt: result.rawValue)
info[NSUnderlyingErrorKey] = NSNumber(integer: result.rawValue)
reject(NSError(domain: PMKErrorDomain, code: PMKOperationFailed, userInfo: info))
case MFMailComposeResultCancelled.rawValue:
case .Cancelled:
reject(NSError.cancelledError())
default:
fulfill(result)

View File

@ -37,15 +37,15 @@ private class PMKMessageComposeViewControllerDelegate: NSObject, MFMessageCompos
@objc func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) {
switch result.rawValue {
case MessageComposeResultSent.rawValue:
switch result {
case .Sent:
fulfill()
case MessageComposeResultFailed.rawValue:
case .Failed:
var info = [NSObject: AnyObject]()
info[NSLocalizedDescriptionKey] = "The attempt to save or send the message was unsuccessful."
info[NSUnderlyingErrorKey] = NSNumber(unsignedInt: result.rawValue)
info[NSUnderlyingErrorKey] = NSNumber(integer: result.rawValue)
reject(NSError(domain: PMKErrorDomain, code: PMKOperationFailed, userInfo: info))
case MessageComposeResultCancelled.rawValue:
case .Cancelled:
reject(NSError.cancelledError())
default:
fatalError("Swift Sucks")

View File

@ -9,7 +9,7 @@
#import "CALayer+AnyPromise.h"
@interface PMKCAAnimationDelegate : NSObject {
@interface PMKCAAnimationDelegate : NSObject <CAAnimationDelegate> {
@public
PMKResolver resolve;
CAAnimation *animation;

View File

@ -48,10 +48,6 @@ private class SKDelegate: NSObject, SKProductsRequestDelegate {
}
@objc override class func initialize() {
#if os(OSX)
NSError.registerCancelledErrorDomain(SKErrorDomain, code: SKErrorPaymentCancelled)
#else
NSError.registerCancelledErrorDomain(SKErrorDomain, code: SKErrorCode.PaymentCancelled.rawValue)
#endif
NSError.registerCancelledErrorDomain(SKErrorDomain, code: SKErrorCode.PaymentCancelled.rawValue)
}
}

View File

@ -1102,7 +1102,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = "Max Howell";
TargetAttributes = {
63533B321AE57A9300C10972 = {
@ -1113,16 +1113,20 @@
};
638CDF021AEE734B0023A543 = {
CreatedOnToolsVersion = 6.3;
LastSwiftMigration = 0800;
};
638E0ED41AEF16530052E28F = {
CreatedOnToolsVersion = 6.3.1;
LastSwiftMigration = 0800;
};
63CA14921AEA9CBE00223904 = {
CreatedOnToolsVersion = 6.3;
LastSwiftMigration = 0800;
TestTargetID = 638CDF021AEE734B0023A543;
};
63F803A21AB87A8200E4DEE1 = {
CreatedOnToolsVersion = 6.2;
LastSwiftMigration = 0800;
};
};
};
@ -1474,9 +1478,9 @@
63533B3D1AE57A9300C10972 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
"$(inherited)",
@ -1498,9 +1502,9 @@
63533B3E1AE57A9300C10972 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
"$(inherited)",
@ -1512,16 +1516,17 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.promisekit.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
6388E1AC1AD315F90074D85B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CLANG_ENABLE_MODULES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
@ -1546,10 +1551,10 @@
6388E1AD1AD315F90074D85B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CLANG_ENABLE_MODULES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
@ -1563,6 +1568,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_OBJC_BRIDGING_HEADER = Tests/CorePromise/bridge.h;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
@ -1600,6 +1606,7 @@
OTHER_SWIFT_FLAGS = "-suppress-warnings";
PRODUCT_BUNDLE_IDENTIFIER = "org.promisekit.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
@ -1623,6 +1630,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.promisekit.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = Tests/Categories/bridge.h;
SWIFT_VERSION = 2.3;
};
name = Debug;
};
@ -1642,15 +1650,17 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.promisekit.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = Tests/Categories/bridge.h;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 2.3;
};
name = Release;
};
63CA14551AE9FBD000223904 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
"$(inherited)",
@ -1675,9 +1685,9 @@
63CA14561AE9FBD000223904 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
"$(inherited)",
@ -1692,6 +1702,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_OBJC_BRIDGING_HEADER = Tests/Categories/bridge.h;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
@ -1737,6 +1748,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.promisekit.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PMKTestHost.app/PMKTestHost";
};
name = Release;
@ -1754,8 +1766,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;
COPY_PHASE_STRIP = NO;
@ -1766,6 +1780,7 @@
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@ -1787,6 +1802,7 @@
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 2.3;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@ -1806,8 +1822,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;
COPY_PHASE_STRIP = NO;
@ -1817,6 +1835,7 @@
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
@ -1830,6 +1849,7 @@
SDKROOT = iphoneos;
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_VERSION = 2.3;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
@ -1843,6 +1863,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
@ -1864,6 +1885,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
@ -1875,6 +1897,7 @@
PRODUCT_BUNDLE_IDENTIFIER = org.promisekit;
PRODUCT_NAME = PromiseKit;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
@ -1908,6 +1931,7 @@
PRODUCT_BUNDLE_IDENTIFIER = org.promisekit;
PRODUCT_NAME = PromiseKit;
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -4,7 +4,7 @@ import XCTest
class TestCLLocationManager: XCTestCase {
func testLocation() {
swizzle(CLLocationManager.self, "startUpdatingLocation") {
swizzle(CLLocationManager.self, #selector(CLLocationManager.startUpdatingLocation)) {
let ex = expectationWithDescription("")
CLLocationManager.promise().then { (x: CLLocation) -> Void in
@ -17,7 +17,7 @@ class TestCLLocationManager: XCTestCase {
}
func testLocations() {
swizzle(CLLocationManager.self, "startUpdatingLocation") {
swizzle(CLLocationManager.self, #selector(CLLocationManager.startUpdatingLocation)) {
let ex = expectationWithDescription("")
CLLocationManager.promise().then { (x: [CLLocation]) -> Void in
@ -42,8 +42,8 @@ class TestCLLocationManager: XCTestCase {
}
func testRequestAuthorization2() {
swizzle(CLLocationManager.self, "requestWhenInUseAuthorization") {
swizzle(CLLocationManager.self, "authorizationStatus", isClassMethod: true) {
swizzle(CLLocationManager.self, #selector(CLLocationManager.requestWhenInUseAuthorization)) {
swizzle(CLLocationManager.self, #selector(CLLocationManager.authorizationStatus), isClassMethod: true) {
let ex = expectationWithDescription("")
CLLocationManager.requestAuthorization().then { x -> Void in

View File

@ -8,7 +8,7 @@ class TestSLRequest: XCTestCase {
// then use the long initializer, and an exception is thrown inside
// init()
swizzle(SLRequest.self, "performRequestWithHandler:") {
swizzle(SLRequest.self, #selector(SLRequest.performRequestWithHandler(_:))) {
let url = NSURL(string: "https://api.twitter.com/1.1/statuses/user_timeline.json")
let params = ["foo": "bar"]
let rq = SLRequest(forServiceType: SLServiceTypeTwitter, requestMethod: SLRequestMethod.GET, URL: url, parameters: params)

View File

@ -4,11 +4,11 @@
#define PMKTestErrorDomain @"PMKTestErrorDomain"
static inline NSError *dummyWithCode(NSInteger code) {
return [NSError errorWithDomain:PMKTestErrorDomain code:rand() userInfo:@{NSLocalizedDescriptionKey: @(code).stringValue}];
return [NSError errorWithDomain:PMKTestErrorDomain code:arc4random() userInfo:@{NSLocalizedDescriptionKey: @(code).stringValue}];
}
static inline NSError *dummy() {
return dummyWithCode(rand());
return dummyWithCode(arc4random());
}
static inline AnyPromise *rejectLater() {

View File

@ -20,7 +20,7 @@ static inline NSError *dummyWithCode(NSInteger code) {
}
static inline NSError *dummyError() {
return dummyWithCode(rand());
return dummyWithCode(arc4random());
}
@interface PMKPromise (BackCompat2)

View File

@ -105,20 +105,20 @@ extension XCTestCase {
return [Int](1...numberOfExpectations).map{ self.expectationWithDescription("\(desc) (\($0))") }
}
let v1 = Int(rand())
let v1 = Int(arc4random())
let e1 = e("already-fulfilled")
test(Promise(v1), e1, v1)
waitForExpectationsWithTimeout(1, handler: nil)
let (p2, f2, _) = Promise<Int>.defer_()
let v2 = Int(rand())
let v2 = Int(arc4random())
let e2 = e("immediately-fulfilled")
test(p2, e2, v2)
f2(v2)
waitForExpectationsWithTimeout(1, handler: nil)
let (p3, f3, _) = Promise<Int>.defer_()
let v3 = Int(rand())
let v3 = Int(arc4random())
let e3 = e("eventually-fulfilled")
later {
test(p3, e3, v3)
@ -133,7 +133,7 @@ extension XCTestCase {
return [Int](1...numberOfExpectations).map{ self.expectationWithDescription("\(desc) (\($0))") }
}
let v1 = NSError(domain:PMKErrorDomain, code:Int(rand()), userInfo:nil)
let v1 = NSError(domain:PMKErrorDomain, code:Int(arc4random()), userInfo:nil)
let e1 = e("already-fulfilled")
test(Promise(v1), e1, v1)
@ -141,14 +141,14 @@ extension XCTestCase {
let e2 = e("immediately-rejected")
let (p2, _, r2) = Promise<Int>.defer_()
let v2 = NSError(domain:PMKErrorDomain, code:Int(rand()), userInfo:nil)
let v2 = NSError(domain:PMKErrorDomain, code:Int(arc4random()), userInfo:nil)
test(p2, e2, v2)
r2(v2)
waitForExpectationsWithTimeout(1, handler: nil)
let e3 = e("eventually-rejected")
let (p3, _, r3) = Promise<Int>.defer_()
let v3 = NSError(domain:PMKErrorDomain, code:Int(rand()), userInfo:nil)
let v3 = NSError(domain:PMKErrorDomain, code:Int(arc4random()), userInfo:nil)
later {
test(p3, e3, v3)
r3(v3)