Delta semántico · 23
bindings/swift/StretchCore/src/lib.rs
bindings/swift/StretchKit/Headers/libstretch.h
diff --git a/.gitignore b/.gitignore
index 560bf9303..d0ecad27b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
/target
/scripts/gentest/target
/bindings/kotlin/stretch/src/main/rust/target
+/bindings/swift/StretchCore/target
**/*.rs.bk
Cargo.lock
diff --git a/StretchKit.podspec b/StretchKit.podspec
index 751e9191b..62d893a70 100644
--- a/StretchKit.podspec
+++ b/StretchKit.podspec
@@ -10,7 +10,7 @@ Pod::Spec.new do |s|
s.social_media_url = 'https://twitter.com/vislyhq'
s.swift_version = '4.2'
- s.ios.deployment_target = '10.0'
+ s.ios.deployment_target = '9.3'
s.source_files = 'bindings/swift/StretchKit/Classes/**/*'
s.xcconfig = { "ENABLE_BITCODE" => "NO" }
diff --git a/bindings/swift/Example/Podfile.lock b/bindings/swift/Example/Podfile.lock
index 94c156585..888642e7b 100644
--- a/bindings/swift/Example/Podfile.lock
+++ b/bindings/swift/Example/Podfile.lock
@@ -22,7 +22,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Nimble: 45f786ae66faa9a709624227fae502db55a8bdd0
Quick: 4be43f6634acfa727dd106bdf3929ce125ffa79d
- StretchKit: 1583b151affb1d5f46f8a734e8cfe2254693d259
+ StretchKit: 9aea832d1c17ded921bf756907ad9e8be2a0a206
PODFILE CHECKSUM: a2173ff6a63387c3ba08b3ae2b7d598a693b79b1
diff --git a/bindings/swift/Example/Pods/Local Podspecs/StretchKit.podspec.json b/bindings/swift/Example/Pods/Local Podspecs/StretchKit.podspec.json
index 604ff3e69..0822d8839 100644
--- a/bindings/swift/Example/Pods/Local Podspecs/StretchKit.podspec.json
+++ b/bindings/swift/Example/Pods/Local Podspecs/StretchKit.podspec.json
@@ -18,7 +18,7 @@
"social_media_url": "https://twitter.com/vislyhq",
"swift_versions": "4.2",
"platforms": {
- "ios": "10.0"
+ "ios": "9.3"
},
"source_files": "bindings/swift/StretchKit/Classes/**/*",
"xcconfig": {
diff --git a/bindings/swift/Example/Pods/Manifest.lock b/bindings/swift/Example/Pods/Manifest.lock
index 94c156585..888642e7b 100644
--- a/bindings/swift/Example/Pods/Manifest.lock
+++ b/bindings/swift/Example/Pods/Manifest.lock
@@ -22,7 +22,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Nimble: 45f786ae66faa9a709624227fae502db55a8bdd0
Quick: 4be43f6634acfa727dd106bdf3929ce125ffa79d
- StretchKit: 1583b151affb1d5f46f8a734e8cfe2254693d259
+ StretchKit: 9aea832d1c17ded921bf756907ad9e8be2a0a206
PODFILE CHECKSUM: a2173ff6a63387c3ba08b3ae2b7d598a693b79b1
diff --git a/bindings/swift/Example/Pods/Pods.xcodeproj/project.pbxproj b/bindings/swift/Example/Pods/Pods.xcodeproj/project.pbxproj
index d796b21da..0a60748d7 100644
--- a/bindings/swift/Example/Pods/Pods.xcodeproj/project.pbxproj
+++ b/bindings/swift/Example/Pods/Pods.xcodeproj/project.pbxproj
@@ -12,6 +12,7 @@
093B514AF1063F1DA238899699E270DC /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = A8313EAA34BE645217DF2852E1522C4B /* QuickSpec.m */; };
09B297BD6AFB877C72BAACA93DA5A883 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083FAD88BB13235D753745BB0BD020DC /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
0AECF1E83CBECC083136E419C6C632CA /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 97CC26A7C8608378C3FD9889E4AD23BF /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
+ 0C26697ED9FBA7B5A8B80BF0E0861988 /* Layout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 697FAE697144A9C9E268F4E07CBAFD60 /* Layout.swift */; };
15A29851E570FF0D7FB6DE10D20AAB55 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA112225FF526E65896DDDF956F74AF1 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
1635FE542AADC84063CC1653F53CF269 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7332A0B6ABF2ED2D514AA4D9D86E93 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
1B84CD4780109223790812BD2C1D2811 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA4ACEB8BB07BE97686541FE31664DC /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
@@ -37,17 +38,17 @@
4323D32B3358A3EC9A6115C532E80314 /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 885169D56AF63F349D986F6FD6A19304 /* Quick-dummy.m */; };
45BC601FADAD02057F4B0E387E5F6F9A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FD98DB8C1AA8E2390412D61DB64864D /* XCTest.framework */; };
47670595847368876E3EE8B7D433C506 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84974814F581E3C4109C60E745BC7FA7 /* HooksPhase.swift */; };
+ 4DBB99F8A44B24C0CEBB9221BA10647E /* StretchKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47BA2A6FB0E07663CDC3EA6A18368537 /* StretchKit-dummy.m */; };
4EEC9C035622F4D4506DD25468515304 /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BBF0EC502678F53DF8E608F8A6ACAD /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; };
50507B7B2A53B164B173A66463422828 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED6EF353CCE6BBF803A1F717FBEC8D1 /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
550407BE017E8F9C887FB3C2E3AF5641 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F246159743DE22E6CD521024BC0F8B /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
552476489423BE8B6F3D12CC7097A3B4 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0530A8F7FBFDC9F647711A1B1906204 /* Nimble-dummy.m */; };
57694C401F4C87A06394D9B589E412B9 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012EE64BD755D0863890CA9320E900A3 /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
58489F14E71BBAA7179632C277C4ABF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 02C2D11765F7EBF07D22F0B2B819E95E /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
- 5A3AC5C7475B822940B9EFEF9B045FD9 /* StretchKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC245B889D6D310070EE5291DB4421A0 /* StretchKit-dummy.m */; };
5AD6E464DD1EE56955DE290C3C8B8FEC /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9194C82BBC06F2BF3019F69BBA2CFE6A /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
5ADD44A9A1DEE51ECC6712E2ECC9420E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDE92ABC2F7B9A21F56722990F2D34E1 /* Foundation.framework */; };
5B007DA41E2B195E5FF32A567AFD41DB /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2934A3B4FE683A7B1077812515D6E5F0 /* XCTestSuite+QuickTestSuiteBuilder.m */; };
- 5C6BCBDCEF1EF1B8C19B75868A8C57F5 /* ReplaceMe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F6A794CA3727083DBDABBF55F3845C /* ReplaceMe.swift */; };
+ 5D9F154AC1DC0CFC852E684D0EE47C26 /* libstretch.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A57257CA5FF2FFBC4D546E1DFEA16F /* libstretch.h */; settings = {ATTRIBUTES = (Public, ); }; };
5ED738281131106C6070594D132C5533 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406655908ED5468CE961BB85AB39C8A7 /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
5FEFA83FC675BBCA06FA6643B3D73361 /* Pods-StretchKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 45850C532D4A2D013205E34223A0DF3C /* Pods-StretchKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
67533550F6B3AC052D36BF026A0DC5A4 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24869D429F09ACFA3227C2E18B5890BD /* Configuration.swift */; };
@@ -59,10 +60,10 @@
779DC067311B3C70E904B56FAA72447D /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4893AA0C4CC52C0B2A7A222C417D540 /* DSL.swift */; };
7814702F97E0025B3FD9C509FFAC8744 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FAD2462D03C757D0F7C333E9CC3968 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
79C3421150AEB0300D270036979B1798 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 272E81A763DF094D944F3A4E51DEAEA0 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7AAEA47985E5A619520A4DA1FF6B7894 /* StretchKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E596616AF100CC187A81DB8966AC291 /* StretchKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
7B0DCABC7CA404EEAF4B7626E8A157DD /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = 48FEC9D5A615C2DFE3E756E8D25871A8 /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
7C0B0A5AFADABD47DADE8D9956B8E6D0 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F741A325D114DF7E530BDD203FB56B4 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
7F4F540E4AE68B46DA70D5243739AF32 /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B077F09D6DBE64FF23B4C78D3D7E69 /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
+ 823C4785722E0BD70BA9325CBB9AB818 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345FA4F2EED3E05023DB3E3346A64EF1 /* Node.swift */; };
836B968E1EA15BA9CB9B2705638A2679 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDE92ABC2F7B9A21F56722990F2D34E1 /* Foundation.framework */; };
875E14F2DC19FE4D537B0ADAFA3CA5B9 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD3C0D4239C9AF15D57728ECFF539CA /* ExampleHooks.swift */; };
893C84B10779FA4477B7C7D2B3D723B1 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AF3B3EFA75292B9FDDC5E6B447AEEAC /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
@@ -83,8 +84,10 @@
A036C8323484A5009F20DDBC73B8DFD4 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E7A4D2583FD85F7DB51543BA1D94E9 /* QuickSelectedTestSuiteBuilder.swift */; };
A350958D67377DE80E194D50D5F6C3B4 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D3859EAFA486485F8FA5D6B49A11D2 /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
A77C011D550EFFB05C3609BFB4DAE378 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E36B3C15E01EE137782FAC1B4FF87475 /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
+ A7D8C1D17667CF78BE532D6935C5DEEC /* Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25A973A3BE3D68234105E9FDC5330A73 /* Style.swift */; };
A971D89C528D23212F024B371F0E1718 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = C583D55E93D2C23506816D0ECC9CB0B0 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; };
AAD8D9F508F9CC045C4715D1F27B2A73 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 696B48A141606A71BC0ABD43B9A52D8F /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
+ ABE7C745FB526DEB0931BB1B30162EC2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDE92ABC2F7B9A21F56722990F2D34E1 /* Foundation.framework */; };
AD6681E3DFBC3870EA1FB6AF1B94CF6E /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD691153E3D635D7044FC779C5E82DB /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
AF749D5A7AB360F4FFCAA9BB96E5065F /* URL+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5E4175EF98E338D8D5D3702B8E48D7D /* URL+FileName.swift */; };
B256929ECC15CB5E4132E0AC72E4CD80 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E416B96F586F3EB4A1DBACB1614B452 /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
@@ -98,6 +101,7 @@
C425B8C3EC8C0612698840BEE599E2A4 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = C132106EC2A2B0BF3B777DF7150EC3A1 /* Example.swift */; };
C472DA557E7C8581DD4C6FAA91A3AEDF /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 65191C87D7890AEF4187AC979AD0E5E2 /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
C5031E73785A648DB774B7B400990B70 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 1208008CFB860726BD6C3DD35E138D78 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CAA802CA153BCFACE43786D069BB91A0 /* StretchKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B122F87FC4E995A8F62CFBE3852EE634 /* StretchKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
CB8F6C788B3B913D5DB96BECFC05A3DB /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 422D1D2C5EAA1517BC9DD050822F4A05 /* QuickSpecBase.m */; };
CD86215E5BC4DB5C76E575AE1A6CAB63 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039D8A83F931FBCB15CA68FFEF57A2EE /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
CF4C47CB3000F22B671837D5C6EB0C0C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDE92ABC2F7B9A21F56722990F2D34E1 /* Foundation.framework */; };
@@ -114,7 +118,6 @@
F0A6D424C5E83532D1A828FE09588B4C /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 722949AE9C9F2FA0EF6CFB37D69144B8 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
F0EB5EDC6364CBBB8D73B9680BC5FBF6 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AEFF6F0F8641915460E14078EAA621 /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
F10A1B92C1E050E153738C5C4BAC664F /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 68938017DBE8BABA6FF05E15B614FA9B /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
- F36F18695099BEA1470251DFDD39FB83 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDE92ABC2F7B9A21F56722990F2D34E1 /* Foundation.framework */; };
F4D3C734AAF98DB3A17ECC3D6A95BC52 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC0E8FB31B8A59EEDED9EC78DB693257 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
F72E8C9D01979824B70FBA6E7A70249F /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB983C01ACCC87D37C64FEEEBD015E6C /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
FAE8D9F50C5FEAF65617922C46B704C3 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACEB3B980103F727C9A633F3B80B1C75 /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; };
@@ -168,16 +171,16 @@
23FAD2462D03C757D0F7C333E9CC3968 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = "<group>"; };
2450165A9350C8074899189666ECDA5C /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = "<group>"; };
24869D429F09ACFA3227C2E18B5890BD /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Quick/Configuration/Configuration.swift; sourceTree = "<group>"; };
+ 25A973A3BE3D68234105E9FDC5330A73 /* Style.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Style.swift; path = bindings/swift/StretchKit/Classes/Style.swift; sourceTree = "<group>"; };
272E81A763DF094D944F3A4E51DEAEA0 /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Sources/QuickObjectiveC/QuickSpec.h; sourceTree = "<group>"; };
2934A3B4FE683A7B1077812515D6E5F0 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = "<group>"; };
2D7D162B345E833ED4C9DA0274A51E2C /* StretchKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = StretchKit.framework; path = StretchKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2E416B96F586F3EB4A1DBACB1614B452 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Sources/Nimble/FailureMessage.swift; sourceTree = "<group>"; };
- 2E596616AF100CC187A81DB8966AC291 /* StretchKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StretchKit-umbrella.h"; sourceTree = "<group>"; };
2FD3C0D4239C9AF15D57728ECFF539CA /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = "<group>"; };
- 36296CEF6520BDFD0C09366B9857BDAB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
+ 345FA4F2EED3E05023DB3E3346A64EF1 /* Node.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Node.swift; path = bindings/swift/StretchKit/Classes/Node.swift; sourceTree = "<group>"; };
+ 34B33C2F15346D17C5EF101AE861496A /* StretchKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = StretchKit.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
364E9FAB6806BBBDFD1BD4E5C7A6126F /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Sources/Quick/DSL/World+DSL.swift"; sourceTree = "<group>"; };
368540D083788E46A27376E7CB7215E0 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Quick/Filter.swift; sourceTree = "<group>"; };
- 3B3583B09277C762B6610C104D184599 /* StretchKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StretchKit-prefix.pch"; sourceTree = "<group>"; };
3D4DE94AC94FFBF28441A0C36561FC78 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBObjCMatcher.swift; path = Sources/Nimble/Adapters/NMBObjCMatcher.swift; sourceTree = "<group>"; };
3E9F7D22BF5690CB87C3259789439181 /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Sources/Quick/Hooks/Closures.swift; sourceTree = "<group>"; };
3EFEEEC9948D8453804CF7F9368DEE5E /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = "<group>"; };
@@ -187,32 +190,33 @@
441B1D5DAE79FCCB2C541078158C4BF6 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = "<group>"; };
45850C532D4A2D013205E34223A0DF3C /* Pods-StretchKit_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-StretchKit_Tests-umbrella.h"; sourceTree = "<group>"; };
465AE41C5EDD179EB8E2E75DDA09D54B /* Quick-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Quick-Info.plist"; sourceTree = "<group>"; };
+ 47BA2A6FB0E07663CDC3EA6A18368537 /* StretchKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "StretchKit-dummy.m"; sourceTree = "<group>"; };
48FEC9D5A615C2DFE3E756E8D25871A8 /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m; sourceTree = "<group>"; };
- 50F6A794CA3727083DBDABBF55F3845C /* ReplaceMe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaceMe.swift; path = bindings/swift/StretchKit/Classes/ReplaceMe.swift; sourceTree = "<group>"; };
516302BEEE3227BA3C6DAD440E033F8F /* ContainElementSatisfying.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainElementSatisfying.swift; path = Sources/Nimble/Matchers/ContainElementSatisfying.swift; sourceTree = "<group>"; };
516325EA52CB6C1B56F86DEF88099275 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5243E8433E7F4F1E8C496EC66E5F0F55 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Quick.modulemap; sourceTree = "<group>"; };
5335C13471371B150AB311F6F7C968EE /* Pods-StretchKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-StretchKit_Tests.release.xcconfig"; sourceTree = "<group>"; };
535E72EA69AB6BFBD3D86432CBF594CD /* Pods-StretchKit_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-StretchKit_Tests-acknowledgements.markdown"; sourceTree = "<group>"; };
53A1C1217C5942387C0D355107B0382E /* Pods-StretchKit_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-StretchKit_Tests-Info.plist"; sourceTree = "<group>"; };
- 54A6A9C2639A3D149CE852121B54EC86 /* StretchKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = StretchKit.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
5AA48BA1D17B1B83CE23CDC2248A7701 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = "<group>"; };
5CB541A541AF860EEA97FE5501182862 /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = "<group>"; };
5E5D08CBE940017CAD86816161289FE5 /* Pods_StretchKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_StretchKit_Tests.framework; path = "Pods-StretchKit_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
60909C72945118E784FF4AEF6450E356 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = "<group>"; };
62E7A4D2583FD85F7DB51543BA1D94E9 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickSelectedTestSuiteBuilder.swift; path = Sources/Quick/QuickSelectedTestSuiteBuilder.swift; sourceTree = "<group>"; };
- 63E5DA746ABAC616C53C3B7B3CEBE4BD /* StretchKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "StretchKit-Info.plist"; sourceTree = "<group>"; };
64AD8B83D74F555E11F65FFF5385A326 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = "<group>"; };
65191C87D7890AEF4187AC979AD0E5E2 /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlMachBadInstructionHandler.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h; sourceTree = "<group>"; };
65854C431528E8C830E8B7C38D0C07FD /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = "<group>"; };
68938017DBE8BABA6FF05E15B614FA9B /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.h; sourceTree = "<group>"; };
696B48A141606A71BC0ABD43B9A52D8F /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = "<group>"; };
+ 697FAE697144A9C9E268F4E07CBAFD60 /* Layout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Layout.swift; path = bindings/swift/StretchKit/Classes/Layout.swift; sourceTree = "<group>"; };
6B4FE44A565B7D51777C3DCF0536EE10 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = "<group>"; };
6BBAA1DC1CA8B0EFC72B63DBDF6330FB /* Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-prefix.pch"; sourceTree = "<group>"; };
6C16292C7017193603A06ACACB75982D /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = "<group>"; };
+ 6C71FAA22CDD51AB6310EA6E22FFADDF /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
6D46641E08F746A053C1B8D92B7A34A4 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = "<group>"; };
6F741A325D114DF7E530BDD203FB56B4 /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Sources/Nimble/Adapters/AssertionDispatcher.swift; sourceTree = "<group>"; };
6FD98DB8C1AA8E2390412D61DB64864D /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+ 709D2CF46B37E4505C5CC36E962D9758 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
722949AE9C9F2FA0EF6CFB37D69144B8 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = "<group>"; };
75D3859EAFA486485F8FA5D6B49A11D2 /* CwlBadInstructionException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlBadInstructionException.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift; sourceTree = "<group>"; };
7685C4338BFBDB65073734C64E3838C1 /* Pods-StretchKit_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-StretchKit_Tests-dummy.m"; sourceTree = "<group>"; };
@@ -222,6 +226,7 @@
7BD691153E3D635D7044FC779C5E82DB /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = "<group>"; };
7C4D831C03026C50D9C46AAA6A6A99DC /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Sources/QuickObjectiveC/DSL/QCKDSL.h; sourceTree = "<group>"; };
7EA4ACEB8BB07BE97686541FE31664DC /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = "<group>"; };
+ 7FCEA176F15397989E60D3103E48C2E4 /* StretchKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StretchKit-prefix.pch"; sourceTree = "<group>"; };
80EFA2D981F85EAF6601CE6AC577D669 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = "<group>"; };
81F935EBD39724CDCD2E42790617701D /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = "<group>"; };
8248FB8AF316C9C78E22B71BC196957D /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Sources/Nimble/Matchers/BeGreaterThan.swift; sourceTree = "<group>"; };
@@ -233,6 +238,7 @@
89C4E6BA342A6FC91795E2E7D80F58F6 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = "<group>"; };
8A2FCA7814FB7C6B002B0AC80B728826 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Sources/Quick/ExampleGroup.swift; sourceTree = "<group>"; };
8A457B9BDB6A97F670558A507319208B /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = "<group>"; };
+ 8BAF434D4F03B9C1D8C49D18DC79C197 /* libstretch.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libstretch.a; path = bindings/swift/StretchKit/Libraries/libstretch.a; sourceTree = "<group>"; };
8BD31630E5AF5A91E26BE84FFB08A710 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Nimble/Expression.swift; sourceTree = "<group>"; };
8EEEBEBF7B787898DF09E2EED055400F /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Nimble/Utils/Errors.swift; sourceTree = "<group>"; };
8F83AA747B59E2383BB6662A3B086129 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = "<group>"; };
@@ -241,21 +247,22 @@
94A3A522E1EFCE6A2A59F49005B74E34 /* String+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+C99ExtendedIdentifier.swift"; path = "Sources/Quick/String+C99ExtendedIdentifier.swift"; sourceTree = "<group>"; };
97CC26A7C8608378C3FD9889E4AD23BF /* NMBStringify.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBStringify.m; path = Sources/NimbleObjectiveC/NMBStringify.m; sourceTree = "<group>"; };
9A0D1AFC5AE24413DD273B5725D87879 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Sources/Nimble/Matchers/BeIdenticalTo.swift; sourceTree = "<group>"; };
+ 9A1A530A2B9939718DD6749E00886C7C /* StretchKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = StretchKit.modulemap; sourceTree = "<group>"; };
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
A0530A8F7FBFDC9F647711A1B1906204 /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = "<group>"; };
+ A3A57257CA5FF2FFBC4D546E1DFEA16F /* libstretch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = libstretch.h; path = bindings/swift/StretchKit/Headers/libstretch.h; sourceTree = "<group>"; };
A42F9FD5967F56D0BEC6D01D8036617B /* Behavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Behavior.swift; path = Sources/Quick/Behavior.swift; sourceTree = "<group>"; };
A4BBF0EC502678F53DF8E608F8A6ACAD /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h; sourceTree = "<group>"; };
A4C7D88B76C4738E7B74168479A92315 /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Sources/Nimble/Matchers/BeAKindOf.swift; sourceTree = "<group>"; };
A78650F56FB20B8C081C0B0A1AFEF5BC /* CwlPreconditionTesting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlPreconditionTesting.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h; sourceTree = "<group>"; };
A8313EAA34BE645217DF2852E1522C4B /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Sources/QuickObjectiveC/QuickSpec.m; sourceTree = "<group>"; };
A957896A3325D9065B06E8F877B18D37 /* Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.xcconfig; sourceTree = "<group>"; };
- AC245B889D6D310070EE5291DB4421A0 /* StretchKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "StretchKit-dummy.m"; sourceTree = "<group>"; };
ACBC5226F7B70DA1DB008F41E4A01382 /* ErrorUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUtility.swift; path = Sources/Quick/ErrorUtility.swift; sourceTree = "<group>"; };
ACEB3B980103F727C9A633F3B80B1C75 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Sources/Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = "<group>"; };
AE6F209352A13BD917FF5EC0A629FFF2 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+CurrentTestBundle.swift"; path = "Sources/Quick/NSBundle+CurrentTestBundle.swift"; sourceTree = "<group>"; };
+ B122F87FC4E995A8F62CFBE3852EE634 /* StretchKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StretchKit-umbrella.h"; sourceTree = "<group>"; };
B14E94646E4C206F66E9782E6E193B11 /* ElementsEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementsEqual.swift; path = Sources/Nimble/Matchers/ElementsEqual.swift; sourceTree = "<group>"; };
B6E258AD83036FBA23547DE0C55FBC5A /* NMBStringify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBStringify.h; path = Sources/NimbleObjectiveC/NMBStringify.h; sourceTree = "<group>"; };
- BB6F1F0DD16C3E7E05C5591755AFFECC /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
BB983C01ACCC87D37C64FEEEBD015E6C /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = "<group>"; };
C132106EC2A2B0BF3B777DF7150EC3A1 /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Sources/Quick/Example.swift; sourceTree = "<group>"; };
C2E47533D52832DD152803938E8A8C59 /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = "<group>"; };
@@ -271,14 +278,13 @@
D99CADB7D855200CFC58F3E45E3E4E1E /* Pods-StretchKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-StretchKit_Tests.debug.xcconfig"; sourceTree = "<group>"; };
DA112225FF526E65896DDDF956F74AF1 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = "<group>"; };
E06F79CAFC1A7C21CE9CA39591BCAAC4 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = "<group>"; };
- E212DDCD8B2284B639D43AFC2ED0689F /* StretchKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StretchKit.xcconfig; sourceTree = "<group>"; };
E36B3C15E01EE137782FAC1B4FF87475 /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = "<group>"; };
E4893AA0C4CC52C0B2A7A222C417D540 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Quick/DSL/DSL.swift; sourceTree = "<group>"; };
E5E4175EF98E338D8D5D3702B8E48D7D /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = "<group>"; };
EB7332A0B6ABF2ED2D514AA4D9D86E93 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = "<group>"; };
+ EC0F9DDB8FB539CEE426169316A51559 /* StretchKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StretchKit.xcconfig; sourceTree = "<group>"; };
EC1D76E5BE2C06FDC8DD47B8BFBAE133 /* Await.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Await.swift; path = Sources/Nimble/Utils/Await.swift; sourceTree = "<group>"; };
EE2CBFD5F43ED31F0DDCC57F9EC33207 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = "<group>"; };
- EEC9020DA506CC4A77D108E822C5CD06 /* StretchKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = StretchKit.modulemap; sourceTree = "<group>"; };
EF20CB0D6D12D898151E14B8FCC6A689 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = "<group>"; };
EF37E74A9438A098FCB61CE88B18A3DF /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = "<group>"; };
F13F7B116AF8EB86D89CA43A8D15C927 /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = "<group>"; };
@@ -286,23 +292,24 @@
F6B1895FACA2B4330622FD41C6F39486 /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = "<group>"; };
FBFD1878741EFB3E1F1940591412D528 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/ExampleMetadata.swift; sourceTree = "<group>"; };
FC0E8FB31B8A59EEDED9EC78DB693257 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = "<group>"; };
+ FD1286F68D127684481D95ABE89E249B /* StretchKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "StretchKit-Info.plist"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- 1EEB312708EE681FF2C2CAEDA06DFB6E /* Frameworks */ = {
+ 3F5152C2C3B861B9F6CA92DAE5050FA1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- F36F18695099BEA1470251DFDD39FB83 /* Foundation.framework in Frameworks */,
+ 5ADD44A9A1DEE51ECC6712E2ECC9420E /* Foundation.framework in Frameworks */,
+ 45BC601FADAD02057F4B0E387E5F6F9A /* XCTest.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3F5152C2C3B861B9F6CA92DAE5050FA1 /* Frameworks */ = {
+ 548F2433C7F6FA78AC50B65960B07F75 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 5ADD44A9A1DEE51ECC6712E2ECC9420E /* Foundation.framework in Frameworks */,
- 45BC601FADAD02057F4B0E387E5F6F9A /* XCTest.framework in Frameworks */,
+ ABE7C745FB526DEB0931BB1B30162EC2 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -325,6 +332,20 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 025D4430E1350E4F578817EC205A2A42 /* StretchKit */ = {
+ isa = PBXGroup;
+ children = (
+ 697FAE697144A9C9E268F4E07CBAFD60 /* Layout.swift */,
+ 345FA4F2EED3E05023DB3E3346A64EF1 /* Node.swift */,
+ 25A973A3BE3D68234105E9FDC5330A73 /* Style.swift */,
+ 409722A135D1A8827BB6BF592CE207A6 /* Pod */,
+ 8C0654F4BFCBEC5968E93F08CEB97ED1 /* StretchCore */,
+ BAB1DD0D71B4823137330EC1D712C85A /* Support Files */,
+ );
+ name = StretchKit;
+ path = ../../../..;
+ sourceTree = "<group>";
+ };
1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -344,6 +365,16 @@
name = Products;
sourceTree = "<group>";
};
+ 409722A135D1A8827BB6BF592CE207A6 /* Pod */ = {
+ isa = PBXGroup;
+ children = (
+ 6C71FAA22CDD51AB6310EA6E22FFADDF /* LICENSE */,
+ 709D2CF46B37E4505C5CC36E962D9758 /* README.md */,
+ 34B33C2F15346D17C5EF101AE861496A /* StretchKit.podspec */,
+ );
+ name = Pod;
+ sourceTree = "<group>";
+ };
4834F4751D2881783C5B5493BD5A931B /* Quick */ = {
isa = PBXGroup;
children = (
@@ -391,14 +422,20 @@
name = "Targets Support Files";
sourceTree = "<group>";
};
- 7E51898782419AF7D3908FD62F6506A0 /* Pod */ = {
+ 6C80168EFCB94D1466C279D3C4061792 /* Frameworks */ = {
isa = PBXGroup;
children = (
- BB6F1F0DD16C3E7E05C5591755AFFECC /* LICENSE */,
- 36296CEF6520BDFD0C09366B9857BDAB /* README.md */,
- 54A6A9C2639A3D149CE852121B54EC86 /* StretchKit.podspec */,
+ 8BAF434D4F03B9C1D8C49D18DC79C197 /* libstretch.a */,
);
- name = Pod;
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 7CC204DF9EEA610D9F1323677D892D45 /* Development Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 025D4430E1350E4F578817EC205A2A42 /* StretchKit */,
+ );
+ name = "Development Pods";
sourceTree = "<group>";
};
872CAA7308FB8E3BA778FF2F77E73ABB /* Pods-StretchKit_Tests */ = {
@@ -418,15 +455,13 @@
path = "Target Support Files/Pods-StretchKit_Tests";
sourceTree = "<group>";
};
- 9D4263E477B85A04AA2A929D1ABE507C /* StretchKit */ = {
+ 8C0654F4BFCBEC5968E93F08CEB97ED1 /* StretchCore */ = {
isa = PBXGroup;
children = (
- 50F6A794CA3727083DBDABBF55F3845C /* ReplaceMe.swift */,
- 7E51898782419AF7D3908FD62F6506A0 /* Pod */,
- D3217182F024390A688BA67BA13616EC /* Support Files */,
+ A3A57257CA5FF2FFBC4D546E1DFEA16F /* libstretch.h */,
+ 6C80168EFCB94D1466C279D3C4061792 /* Frameworks */,
);
- name = StretchKit;
- path = ../../../..;
+ name = StretchCore;
sourceTree = "<group>";
};
B4A20DE51C57CCE6549A26D79F664F86 /* iOS */ = {
@@ -438,6 +473,20 @@
name = iOS;
sourceTree = "<group>";
};
+ BAB1DD0D71B4823137330EC1D712C85A /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ 9A1A530A2B9939718DD6749E00886C7C /* StretchKit.modulemap */,
+ EC0F9DDB8FB539CEE426169316A51559 /* StretchKit.xcconfig */,
+ 47BA2A6FB0E07663CDC3EA6A18368537 /* StretchKit-dummy.m */,
+ FD1286F68D127684481D95ABE89E249B /* StretchKit-Info.plist */,
+ 7FCEA176F15397989E60D3103E48C2E4 /* StretchKit-prefix.pch */,
+ B122F87FC4E995A8F62CFBE3852EE634 /* StretchKit-umbrella.h */,
+ );
+ name = "Support Files";
+ path = "bindings/swift/Example/Pods/Target Support Files/StretchKit";
+ sourceTree = "<group>";
+ };
BD2F1A6FE68DC5AF3C94418A88BB7E29 /* Pods */ = {
isa = PBXGroup;
children = (
@@ -451,7 +500,7 @@
isa = PBXGroup;
children = (
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
- FC43DF4D08ED0DCFFAFF22D8C627ED2C /* Development Pods */,
+ 7CC204DF9EEA610D9F1323677D892D45 /* Development Pods */,
1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */,
BD2F1A6FE68DC5AF3C94418A88BB7E29 /* Pods */,
25B2B4D6DB7AD9E4A9213558E7E3B90F /* Products */,
@@ -459,20 +508,6 @@
);
sourceTree = "<group>";
};
- D3217182F024390A688BA67BA13616EC /* Support Files */ = {
- isa = PBXGroup;
- children = (
- EEC9020DA506CC4A77D108E822C5CD06 /* StretchKit.modulemap */,
- E212DDCD8B2284B639D43AFC2ED0689F /* StretchKit.xcconfig */,
- AC245B889D6D310070EE5291DB4421A0 /* StretchKit-dummy.m */,
- 63E5DA746ABAC616C53C3B7B3CEBE4BD /* StretchKit-Info.plist */,
- 3B3583B09277C762B6610C104D184599 /* StretchKit-prefix.pch */,
- 2E596616AF100CC187A81DB8966AC291 /* StretchKit-umbrella.h */,
- );
- name = "Support Files";
- path = "bindings/swift/Example/Pods/Target Support Files/StretchKit";
- sourceTree = "<group>";
- };
E2697886F3CD10A152F47D611F1B1A3B /* Nimble */ = {
isa = PBXGroup;
children = (
@@ -566,14 +601,6 @@
path = "../Target Support Files/Quick";
sourceTree = "<group>";
};
- FC43DF4D08ED0DCFFAFF22D8C627ED2C /* Development Pods */ = {
- isa = PBXGroup;
- children = (
- 9D4263E477B85A04AA2A929D1ABE507C /* StretchKit */,
- );
- name = "Development Pods";
- sourceTree = "<group>";
- };
FF18E9D757C04B2D9DD64D169490B0B4 /* Support Files */ = {
isa = PBXGroup;
children = (
@@ -591,6 +618,15 @@
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
+ 491305A6BAD1589B275C2792F88058C3 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5D9F154AC1DC0CFC852E684D0EE47C26 /* libstretch.h in Headers */,
+ CAA802CA153BCFACE43786D069BB91A0 /* StretchKit-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
6690559A0FA18F0752F27A511B8DAAD6 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
@@ -607,14 +643,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- C95B9FC43CFD57C0BF87A81FEF92D145 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7AAEA47985E5A619520A4DA1FF6B7894 /* StretchKit-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
CBA2707A202D1B1E850BBE92256B45C0 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
@@ -698,12 +726,12 @@
};
E1B3BA447AA09CF679D5E65C02531B03 /* StretchKit */ = {
isa = PBXNativeTarget;
- buildConfigurationList = B39FFCA835D39BFBA81B942819050FA3 /* Build configuration list for PBXNativeTarget "StretchKit" */;
+ buildConfigurationList = 8B67967432459EC984FFC245038C5868 /* Build configuration list for PBXNativeTarget "StretchKit" */;
buildPhases = (
- C95B9FC43CFD57C0BF87A81FEF92D145 /* Headers */,
- 7CDE8651A26FAD6A0E7DEB853333F8A7 /* Sources */,
- 1EEB312708EE681FF2C2CAEDA06DFB6E /* Frameworks */,
- 9F8B55DEA7041FEC05278B9E64646D6C /* Resources */,
+ 491305A6BAD1589B275C2792F88058C3 /* Headers */,
+ 56289C8822801BED5418944F7F78C189 /* Sources */,
+ 548F2433C7F6FA78AC50B65960B07F75 /* Frameworks */,
+ 559FF470544F753B0B9DB15600C90717 /* Resources */,
);
buildRules = (
);
@@ -751,7 +779,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 9F8B55DEA7041FEC05278B9E64646D6C /* Resources */ = {
+ 559FF470544F753B0B9DB15600C90717 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -808,6 +836,17 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 56289C8822801BED5418944F7F78C189 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0C26697ED9FBA7B5A8B80BF0E0861988 /* Layout.swift in Sources */,
+ 823C4785722E0BD70BA9325CBB9AB818 /* Node.swift in Sources */,
+ 4DBB99F8A44B24C0CEBB9221BA10647E /* StretchKit-dummy.m in Sources */,
+ A7D8C1D17667CF78BE532D6935C5DEEC /* Style.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
696291B3BF50FCD63898B3DD76DEB747 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -886,15 +925,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 7CDE8651A26FAD6A0E7DEB853333F8A7 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 5C6BCBDCEF1EF1B8C19B75868A8C57F5 /* ReplaceMe.swift in Sources */,
- 5A3AC5C7475B822940B9EFEF9B045FD9 /* StretchKit-dummy.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@@ -919,39 +949,6 @@
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
- 1D38C04B5CC706C35C681287C73CCEB7 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = E212DDCD8B2284B639D43AFC2ED0689F /* StretchKit.xcconfig */;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- CLANG_ENABLE_OBJC_WEAK = NO;
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/StretchKit/StretchKit-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/StretchKit/StretchKit-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MODULEMAP_FILE = "Target Support Files/StretchKit/StretchKit.modulemap";
- PRODUCT_MODULE_NAME = StretchKit;
- PRODUCT_NAME = StretchKit;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 4.2;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
20C9A6043CF666167279CF421175F6E1 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D99CADB7D855200CFC58F3E45E3E4E1E /* Pods-StretchKit_Tests.debug.xcconfig */;
@@ -1051,12 +1048,11 @@
};
name = Debug;
};
- 5A9DBD9D587400A32352CD90290C95A7 /* Release */ = {
+ 50FE68CF7975EF076C67E6A3758DA5B6 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E212DDCD8B2284B639D43AFC2ED0689F /* StretchKit.xcconfig */;
+ baseConfigurationReference = EC0F9DDB8FB539CEE426169316A51559 /* StretchKit.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- CLANG_ENABLE_OBJC_WEAK = NO;
CODE_SIGN_IDENTITY = "";
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
@@ -1069,7 +1065,7 @@
GCC_PREFIX_HEADER = "Target Support Files/StretchKit/StretchKit-prefix.pch";
INFOPLIST_FILE = "Target Support Files/StretchKit/StretchKit-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MODULEMAP_FILE = "Target Support Files/StretchKit/StretchKit.modulemap";
PRODUCT_MODULE_NAME = StretchKit;
@@ -1213,6 +1209,38 @@
};
name = Release;
};
+ ADEA8D43965BBDCD93EE55313511978C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = EC0F9DDB8FB539CEE426169316A51559 /* StretchKit.xcconfig */;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GCC_PREFIX_HEADER = "Target Support Files/StretchKit/StretchKit-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/StretchKit/StretchKit-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.3;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MODULEMAP_FILE = "Target Support Files/StretchKit/StretchKit.modulemap";
+ PRODUCT_MODULE_NAME = StretchKit;
+ PRODUCT_NAME = StretchKit;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 4.2;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
B2F78AA1391D32EADBBA8E3A02E458F4 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = A957896A3325D9065B06E8F877B18D37 /* Quick.xcconfig */;
@@ -1341,11 +1369,11 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- B39FFCA835D39BFBA81B942819050FA3 /* Build configuration list for PBXNativeTarget "StretchKit" */ = {
+ 8B67967432459EC984FFC245038C5868 /* Build configuration list for PBXNativeTarget "StretchKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 1D38C04B5CC706C35C681287C73CCEB7 /* Debug */,
- 5A9DBD9D587400A32352CD90290C95A7 /* Release */,
+ ADEA8D43965BBDCD93EE55313511978C /* Debug */,
+ 50FE68CF7975EF076C67E6A3758DA5B6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.debug.xcconfig b/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.debug.xcconfig
index c196b4ae7..45365324b 100644
--- a/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.debug.xcconfig
+++ b/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.debug.xcconfig
@@ -4,7 +4,8 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Nimble/Nimble.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Quick/Quick.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/StretchKit/StretchKit.framework/Headers" ${PODS_ROOT}/StretchCore/Headers
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_LDFLAGS = $(inherited) -framework "Nimble" -framework "Quick" -framework "StretchKit" -framework "XCTest" -weak_framework "XCTest"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../StretchKit/Libraries"
+OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" -framework "Quick" -framework "StretchKit" -framework "XCTest" -weak_framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
diff --git a/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.release.xcconfig b/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.release.xcconfig
index c196b4ae7..45365324b 100644
--- a/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.release.xcconfig
+++ b/bindings/swift/Example/Pods/Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.release.xcconfig
@@ -4,7 +4,8 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Nimble/Nimble.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Quick/Quick.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/StretchKit/StretchKit.framework/Headers" ${PODS_ROOT}/StretchCore/Headers
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
-OTHER_LDFLAGS = $(inherited) -framework "Nimble" -framework "Quick" -framework "StretchKit" -framework "XCTest" -weak_framework "XCTest"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../StretchKit/Libraries"
+OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" -framework "Quick" -framework "StretchKit" -framework "XCTest" -weak_framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
diff --git a/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit-umbrella.h b/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit-umbrella.h
index b1cf2ad5b..b23b8cc30 100644
--- a/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit-umbrella.h
+++ b/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit-umbrella.h
@@ -10,6 +10,7 @@
#endif
#endif
+#import "libstretch.h"
FOUNDATION_EXPORT double StretchKitVersionNumber;
FOUNDATION_EXPORT const unsigned char StretchKitVersionString[];
diff --git a/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit.xcconfig b/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit.xcconfig
index 22de87059..75b8df798 100644
--- a/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit.xcconfig
+++ b/bindings/swift/Example/Pods/Target Support Files/StretchKit/StretchKit.xcconfig
@@ -2,6 +2,8 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/StretchKit
ENABLE_BITCODE = NO
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/StretchCore/Headers
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../StretchKit/Libraries"
+OTHER_LDFLAGS = $(inherited) -l"stretch"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
diff --git a/bindings/swift/Example/StretchKit.xcodeproj/project.pbxproj b/bindings/swift/Example/StretchKit.xcodeproj/project.pbxproj
index a22dbbaab..f9b16f270 100644
--- a/bindings/swift/Example/StretchKit.xcodeproj/project.pbxproj
+++ b/bindings/swift/Example/StretchKit.xcodeproj/project.pbxproj
@@ -8,7 +8,7 @@
/* Begin PBXBuildFile section */
389F6E8D0121E5914917FB09 /* Pods_StretchKit_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 639978D728B12E3F3919640F /* Pods_StretchKit_Tests.framework */; };
- 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; };
+ 607FACEC1AFB9204008FA782 /* NodeSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* NodeSpec.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -16,7 +16,7 @@
30FC92ABE93DE856E8BCCADE /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
607FACE51AFB9204008FA782 /* StretchKit_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StretchKit_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = "<group>"; };
+ 607FACEB1AFB9204008FA782 /* NodeSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeSpec.swift; sourceTree = "<group>"; };
639978D728B12E3F3919640F /* Pods_StretchKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_StretchKit_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
90993DB6308A4FC1D4679EB0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
B824EA499BA578E6E648CA1D /* Pods-StretchKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StretchKit_Tests.release.xcconfig"; path = "Target Support Files/Pods-StretchKit_Tests/Pods-StretchKit_Tests.release.xcconfig"; sourceTree = "<group>"; };
@@ -57,7 +57,7 @@
607FACE81AFB9204008FA782 /* Tests */ = {
isa = PBXGroup;
children = (
- 607FACEB1AFB9204008FA782 /* Tests.swift */,
+ 607FACEB1AFB9204008FA782 /* NodeSpec.swift */,
607FACE91AFB9204008FA782 /* Supporting Files */,
);
path = Tests;
@@ -133,7 +133,6 @@
607FACE41AFB9204008FA782 = {
CreatedOnToolsVersion = 6.3.1;
LastSwiftMigration = 0900;
- TestTargetID = 607FACCF1AFB9204008FA782;
};
};
};
@@ -217,7 +216,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */,
+ 607FACEC1AFB9204008FA782 /* NodeSpec.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -347,7 +346,6 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StretchKit_Example.app/StretchKit_Example";
};
name = Debug;
};
@@ -365,7 +363,6 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StretchKit_Example.app/StretchKit_Example";
};
name = Release;
};
diff --git a/bindings/swift/Example/Tests/NodeSpec.swift b/bindings/swift/Example/Tests/NodeSpec.swift
new file mode 100644
index 000000000..c2f78aac2
--- /dev/null
+++ b/bindings/swift/Example/Tests/NodeSpec.swift
@@ -0,0 +1,90 @@
+import Quick
+import Nimble
+import StretchKit
+
+class NodeSpec: QuickSpec {
+ override func spec() {
+ it("will create node") {
+ let child = Node(style: Style(), children: [])
+ let node = Node(style: Style(), children: [child])
+ expect(node.getChildCount()) == 1
+ }
+
+ it("will create leaf") {
+ let node = Node(style: Style()) { constraint in
+ return Size(width: 100.0, height: 100.0)
+ }
+
+ let layout = node.computeLayout(size: Size(width: nil, height: nil))
+ expect(layout.width) == 100.0
+ expect(layout.height) == 100.0
+ }
+
+ it("will set measure") {
+ let node = Node(style: Style(), children: [])
+ node.setMeasure { constraint in
+ return Size(width: 100.0, height: 100.0)
+ }
+
+ let layout = node.computeLayout(size: Size(width: nil, height: nil))
+ expect(layout.width) == 100.0
+ expect(layout.height) == 100.0
+ }
+
+ it("will add child") {
+ let node = Node(style: Style(), children: [])
+ let child = Node(style: Style(), children: [])
+ node.addChild(child: child)
+ expect(node.getChildCount()) == 1
+ }
+
+ it("will remove child") {
+ let child = Node(style: Style(), children: [])
+ let node = Node(style: Style(), children: [child])
+ node.removeChild(child: child)
+ expect(node.getChildCount()) == 0
+ }
+
+ it("will remove child at index") {
+ let child = Node(style: Style(), children: [])
+ let node = Node(style: Style(), children: [child])
+ node.removeChildAtIndex(index: 0)
+ expect(node.getChildCount()) == 0
+ }
+
+ it("will replace child at index") {
+ let child1 = Node(style: Style(size: Size(width: .points(100.0), height: .points(100.0))), children: [])
+ let child2 = Node(style: Style(size: Size(width: .points(200.0), height: .points(200.0))), children: [])
+ let node = Node(style: Style(), children: [child1])
+ node.replaceChildAtIndex(index: 0, child: child2)
+
+ let layout = node.computeLayout(size: Size(width: nil, height: nil))
+ expect(layout.width) == 200.0
+ expect(layout.height) == 200.0
+ }
+
+ it("will set style") {
+ let node = Node(style: Style(size: Size(width: .points(100.0), height: .points(100.0))), children: [])
+ node.setStyle(style: Style(size: Size(width: .points(200.0), height: .points(200.0))))
+
+ let layout = node.computeLayout(size: Size(width: nil, height: nil))
+ expect(layout.width) == 200.0
+ expect(layout.height) == 200.0
+ }
+
+ it("will set children") {
+ let node = Node(style: Style(), children: [])
+ let child = Node(style: Style(), children: [])
+ node.setChildren(children: [child])
+ expect(node.getChildCount()) == 1
+ }
+
+ it("will mark node dirty") {
+ let node = Node(style: Style(), children: [])
+ let _ = node.computeLayout(size: Size(width: nil, height: nil))
+ expect(node.isDirty()) == false
+ node.markDirty()
+ expect(node.isDirty()) == true
+ }
+ }
+}
diff --git a/bindings/swift/Example/Tests/Tests.swift b/bindings/swift/Example/Tests/Tests.swift
deleted file mode 100644
index 924fddcb1..000000000
--- a/bindings/swift/Example/Tests/Tests.swift
+++ /dev/null
@@ -1,50 +0,0 @@
-// https://github.com/Quick/Quick
-
-import Quick
-import Nimble
-import StretchKit
-
-class TableOfContentsSpec: QuickSpec {
- override func spec() {
- describe("these will fail") {
-
- it("can do maths") {
- expect(1) == 2
- }
-
- it("can read") {
- expect("number") == "string"
- }
-
- it("will eventually fail") {
- expect("time").toEventually( equal("done") )
- }
-
- context("these will pass") {
-
- it("can do maths") {
- expect(23) == 23
- }
-
- it("can read") {
- expect("🐮") == "🐮"
- }
-
- it("will eventually pass") {
- var time = "passing"
-
- DispatchQueue.main.async {
- time = "done"
- }
-
- waitUntil { done in
- Thread.sleep(forTimeInterval: 0.5)
- expect(time) == "done"
-
- done()
- }
- }
- }
- }
- }
-}
diff --git a/bindings/swift/StretchCore/Cargo.toml b/bindings/swift/StretchCore/Cargo.toml
new file mode 100644
index 000000000..feb73aaf4
--- /dev/null
+++ b/bindings/swift/StretchCore/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "ios-stretch"
+version = "0.1.0"
+authors = ["Emil Sjölander <emil@visly.app>"]
+edition = "2018"
+
+[dependencies]
+stretch = "0.2.2"
+
+[lib]
+name = "stretch"
+crate-type = ["staticlib"]
+
+[workspace]
+members = []
diff --git a/bindings/swift/StretchCore/src/lib.rs b/bindings/swift/StretchCore/src/lib.rs
new file mode 100644
index 000000000..aa83d95bf
--- /dev/null
+++ b/bindings/swift/StretchCore/src/lib.rs
@@ -0,0 +1,310 @@
+use std::f32;
+use std::os::raw::*;
+use stretch::node::*;
+use stretch::style::*;
+use stretch::result::{Layout};
+use stretch::geometry::*;
+use stretch::number::*;
+
+#[repr(C)]
+pub struct StretchSize {
+ width: f32,
+ height: f32,
+}
+
+#[repr(C)]
+pub struct StretchStyleDimension {
+ dimen_type: i32,
+ dimen_value: f32,
+}
+
+impl Into<Dimension> for StretchStyleDimension {
+ fn into(self) -> Dimension {
+ match self.dimen_type {
+ 0 => Dimension::Points(self.dimen_value),
+ 1 => Dimension::Percent(self.dimen_value),
+ 2 => Dimension::Auto,
+ 3 => Dimension::Undefined,
+ _ => panic!()
+ }
+ }
+}
+
+#[repr(C)]
+pub struct StretchStyleRect {
+ start: StretchStyleDimension,
+ end: StretchStyleDimension,
+ top: StretchStyleDimension,
+ bottom: StretchStyleDimension,
+}
+
+#[repr(C)]
+pub struct StretchStyleSize {
+ width: StretchStyleDimension,
+ height: StretchStyleDimension,
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_style_create(
+ display: i32,
+ position_type: i32,
+ direction: i32,
+ flex_direction: i32,
+ flex_wrap: i32,
+ overflow: i32,
+ align_items: i32,
+ align_self: i32,
+ align_content: i32,
+ justify_content: i32,
+
+ position: StretchStyleRect,
+ margin: StretchStyleRect,
+ padding: StretchStyleRect,
+ border: StretchStyleRect,
+
+ flex_grow: f32,
+ flex_shrink: f32,
+
+ flex_basis: StretchStyleDimension,
+
+ size: StretchStyleSize,
+ min_size: StretchStyleSize,
+ max_size: StretchStyleSize,
+
+ aspect_ratio: f32
+) -> *mut c_void {
+ Box::into_raw(Box::new(Style {
+ display: match display {
+ 0 => Display::Flex,
+ 1 => Display::None,
+ _ => panic!()
+ },
+
+ position_type: match position_type {
+ 0 => PositionType::Relative,
+ 1 => PositionType::Absolute,
+ _ => panic!()
+ },
+
+ direction: match direction {
+ 0 => Direction::Inherit,
+ 1 => Direction::LTR,
+ 2 => Direction::RTL,
+ _ => panic!()
+ },
+
+ flex_direction: match flex_direction {
+ 0 => FlexDirection::Row,
+ 1 => FlexDirection::Column,
+ 2 => FlexDirection::RowReverse,
+ 3 => FlexDirection::ColumnReverse,
+ _ => panic!()
+ },
+
+ flex_wrap: match flex_wrap {
+ 0 => FlexWrap::NoWrap,
+ 1 => FlexWrap::Wrap,
+ 2 => FlexWrap::WrapReverse,
+ _ => panic!()
+ },
+
+ overflow: match overflow {
+ 0 => Overflow::Visible,
+ 1 => Overflow::Hidden,
+ 2 => Overflow::Scroll,
+ _ => panic!()
+ },
+
+ align_items: match align_items {
+ 0 => AlignItems::FlexStart,
+ 1 => AlignItems::FlexEnd,
+ 2 => AlignItems::Center,
+ 3 => AlignItems::Baseline,
+ 4 => AlignItems::Stretch,
+ _ => panic!()
+ },
+
+ align_self: match align_self {
+ 0 => AlignSelf::Auto,
+ 1 => AlignSelf::FlexStart,
+ 2 => AlignSelf::FlexEnd,
+ 3 => AlignSelf::Center,
+ 4 => AlignSelf::Baseline,
+ 5 => AlignSelf::Stretch,
+ _ => panic!()
+ },
+
+ align_content: match align_content {
+ 0 => AlignContent::FlexStart,
+ 1 => AlignContent::FlexEnd,
+ 2 => AlignContent::Center,
+ 3 => AlignContent::Stretch,
+ 4 => AlignContent::SpaceBetween,
+ 5 => AlignContent::SpaceAround,
+ _ => panic!()
+ },
+
+ justify_content: match justify_content {
+ 0 => JustifyContent::FlexStart,
+ 1 => JustifyContent::FlexEnd,
+ 2 => JustifyContent::Center,
+ 3 => JustifyContent::SpaceBetween,
+ 4 => JustifyContent::SpaceAround,
+ 5 => JustifyContent::SpaceEvenly,
+ _ => panic!()
+ },
+
+ position: Rect {
+ start: position.start.into(),
+ end: position.end.into(),
+ top: position.top.into(),
+ bottom: position.bottom.into(),
+ },
+
+ margin: Rect {
+ start: margin.start.into(),
+ end: margin.end.into(),
+ top: margin.top.into(),
+ bottom: margin.bottom.into(),
+ },
+
+ padding: Rect {
+ start: padding.start.into(),
+ end: padding.end.into(),
+ top: padding.top.into(),
+ bottom: padding.bottom.into(),
+ },
+
+ border: Rect {
+ start: border.start.into(),
+ end: border.end.into(),
+ top: border.top.into(),
+ bottom: border.bottom.into(),
+ },
+
+ flex_grow,
+ flex_shrink,
+
+ flex_basis: flex_basis.into(),
+
+ size: Size { width: size.width.into(), height: size.height.into() },
+ min_size: Size { width: min_size.width.into(), height: min_size.height.into() },
+ max_size: Size { width: max_size.width.into(), height: max_size.height.into() },
+
+ aspect_ratio: if f32::is_nan(aspect_ratio) {
+ Number::Undefined
+ } else {
+ Number::Defined(aspect_ratio)
+ },
+ })) as *mut c_void
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_style_free(style: *mut c_void) {
+ let _style = unsafe { Box::from_raw(style as *mut Style) };
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_create(style: *mut c_void) -> *mut c_void {
+ let style = unsafe { Box::from_raw(style as *mut Style) };
+ Box::into_raw(Box::new(Node::new(*Box::leak(style), vec![]))) as *mut c_void
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_free(node: *mut c_void) {
+ let _node = unsafe { Box::from_raw(node as *mut Node) };
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_set_measure(node: *mut c_void, swift_ptr: *mut c_void, measure: fn(*const c_void, f32, f32) -> StretchSize) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ Box::leak(node).set_measure(Some(Box::new(move |constraint| {
+ let size = measure(
+ swift_ptr,
+ constraint.width.or_else(f32::NAN),
+ constraint.height.or_else(f32::NAN),
+ );
+ Ok(Size { width: size.width, height: size.height })
+ })));
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_set_style(node: *mut c_void, style: *mut c_void) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ let style = unsafe { Box::from_raw(style as *mut Style) };
+ Box::leak(node).set_style(*Box::leak(style));
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_dirty(node: *mut c_void) -> bool {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ Box::leak(node).dirty()
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_mark_dirty(node: *mut c_void) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ Box::leak(node).mark_dirty();
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_add_child(node: *mut c_void, child: *mut c_void) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ let child = unsafe { Box::from_raw(child as *mut Node) };
+ Box::leak(node).add_child(Box::leak(child));
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_replace_child_at_index(node: *mut c_void, index: usize, child: *mut c_void) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ let child = unsafe { Box::from_raw(child as *mut Node) };
+ Box::leak(node).replace_child_at_index(index, Box::leak(child));
+
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_remove_child(node: *mut c_void, child: *mut c_void) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ let child = unsafe { Box::from_raw(child as *mut Node) };
+ Box::leak(node).remove_child(Box::leak(child));
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_remove_child_at_index(node: *mut c_void, index: usize) {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ Box::leak(node).remove_child_at_index(index);
+}
+
+#[no_mangle]
+pub extern "C" fn stretch_node_compute_layout(node: *mut c_void, width: f32, height: f32, create_layout: fn(*const f32) -> *mut c_void) -> *mut c_void {
+ let node = unsafe { Box::from_raw(node as *mut Node) };
+ let layout = Box::leak(node).compute_layout(Size {
+ width: if f32::is_nan(width) {
+ Number::Undefined
+ } else {
+ Number::Defined(width)
+ },
+ height: if f32::is_nan(height) {
+ Number::Undefined
+ } else {
+ Number::Defined(height)
+ },
+ }).unwrap();
+
+ let mut output = vec![];
+ copy_output(&layout, &mut output);
+
+ create_layout(output.as_ptr())
+}
+
+fn copy_output(layout: &Layout, output: &mut Vec<f32>) {
+ output.push(layout.location.x);
+ output.push(layout.location.y);
+ output.push(layout.size.width);
+ output.push(layout.size.height);
+ output.push(layout.children.len() as f32);
+
+ for child in &layout.children {
+ copy_output(child, output);
+ }
+}
diff --git a/bindings/swift/StretchKit/Classes/Layout.swift b/bindings/swift/StretchKit/Classes/Layout.swift
new file mode 100644
index 000000000..6d1469bd3
--- /dev/null
+++ b/bindings/swift/StretchKit/Classes/Layout.swift
@@ -0,0 +1,44 @@
+import Foundation
+
+public class Layout {
+ public let x: Float
+ public let y: Float
+ public let width: Float
+ public let height: Float
+ public let children: Array<Layout>
+
+ internal init(x: Float, y: Float, width: Float, height: Float, children: Array<Layout>) {
+ self.x = x
+ self.y = y
+ self.width = width
+ self.height = height
+ self.children = children
+ }
+
+ internal static func fromFloats(_ floats: UnsafePointer<Float>) -> (UnsafePointer<Float>, Layout) {
+ let x = floats.pointee;
+ var floats = floats.advanced(by: 1)
+
+ let y = floats.pointee
+ floats = floats.advanced(by: 1)
+
+ let width = floats.pointee
+ floats = floats.advanced(by: 1)
+
+ let height = floats.pointee
+ floats = floats.advanced(by: 1)
+
+ let childCount = Int(floats.pointee)
+ floats = floats.advanced(by: 1)
+
+ var children = [Layout]()
+
+ for _ in 0..<childCount {
+ let child = Layout.fromFloats(floats)
+ floats = child.0
+ children.append(child.1)
+ }
+
+ return (floats, Layout(x: x, y: y, width: width, height: height, children: children))
+ }
+}
diff --git a/bindings/swift/StretchKit/Classes/Node.swift b/bindings/swift/StretchKit/Classes/Node.swift
new file mode 100644
index 000000000..9865ce414
--- /dev/null
+++ b/bindings/swift/StretchKit/Classes/Node.swift
@@ -0,0 +1,111 @@
+import Foundation
+
+private func node_measure(_ node: UnsafeRawPointer?, _ width: Float, _ height: Float) -> StretchSize {
+ let node: Node = Unmanaged.fromOpaque(node!).takeUnretainedValue()
+ let size = node.measure!(Size(width: width.isNaN ? nil : width, height: height.isNaN ? nil : height))
+ return StretchSize(width: size.width, height: size.height)
+}
+
+private func create_layout(_ floats: UnsafePointer<Float>?) -> UnsafeMutableRawPointer? {
+ let layout = Layout.fromFloats(floats!).1
+ return Unmanaged.passRetained(layout).toOpaque()
+}
+
+public typealias MeasureFunc = (Size<Float?>) -> Size<Float>
+
+public class Node {
+ private let rustptr: UnsafeMutableRawPointer
+ private var style: Style
+ private var children: Array<Node> = []
+ internal var measure: MeasureFunc? = nil
+
+ public init(style: Style, measure: @escaping MeasureFunc) {
+ self.rustptr = stretch_node_create(style.rustptr)
+ self.style = style
+ setMeasure(measure: measure)
+ }
+
+ public init(style: Style, children: Array<Node>) {
+ self.rustptr = stretch_node_create(style.rustptr)
+ self.style = style
+ setChildren(children: children)
+ }
+
+ public func setMeasure(measure: @escaping MeasureFunc) {
+ stretch_node_set_measure(rustptr, Unmanaged.passRetained(self).toOpaque(), node_measure)
+ self.measure = measure;
+ }
+
+ public func getChildren() -> Array<Node> {
+ return self.children
+ }
+
+ public func setChildren(children: Array<Node>) {
+ let num_children = self.children.count
+ for i in 0..<num_children {
+ removeChildAtIndex(index: num_children - 1 - i)
+ }
+
+ for child in children {
+ addChild(child: child)
+ }
+ }
+
+ public func addChild(child: Node) {
+ stretch_node_add_child(rustptr, child.rustptr)
+ children.append(child)
+ }
+
+ @discardableResult
+ public func replaceChildAtIndex(index: Int, child: Node) -> Node {
+ stretch_node_replace_child_at_index(rustptr, UInt(index), child.rustptr)
+ let oldChild = children[index]
+ children[index] = child
+ return oldChild
+ }
+
+ @discardableResult
+ public func removeChild(child: Node) -> Node {
+ stretch_node_remove_child(rustptr, child.rustptr)
+ children.removeAll { (node) -> Bool in
+ return node === child
+ }
+ return child
+ }
+
+ @discardableResult
+ public func removeChildAtIndex(index: Int) -> Node {
+ stretch_node_remove_child_at_index(rustptr, UInt(index))
+ return children.remove(at: index)
+ }
+
+ public func getStyle() -> Style {
+ return self.style
+ }
+
+ public func setStyle(style: Style) {
+ stretch_node_set_style(rustptr, style.rustptr)
+ self.style = style
+ }
+
+ public func markDirty() {
+ stretch_node_mark_dirty(rustptr)
+ }
+
+ public func isDirty() -> Bool {
+ return stretch_node_dirty(rustptr)
+ }
+
+ public func getChildCount() -> Int {
+ return self.children.count
+ }
+
+ public func computeLayout(size: Size<Float?>) -> Layout {
+ let layoutPtr = stretch_node_compute_layout(
+ rustptr, size.width ?? Float.nan,
+ size.height ?? Float.nan,
+ create_layout)
+ let layout: Layout = Unmanaged.fromOpaque(layoutPtr!).takeUnretainedValue()
+ return layout
+ }
+}
diff --git a/bindings/swift/StretchKit/Classes/ReplaceMe.swift b/bindings/swift/StretchKit/Classes/ReplaceMe.swift
deleted file mode 100644
index e69de29bb..000000000
diff --git a/bindings/swift/StretchKit/Classes/Style.swift b/bindings/swift/StretchKit/Classes/Style.swift
new file mode 100644
index 000000000..112c5acac
--- /dev/null
+++ b/bindings/swift/StretchKit/Classes/Style.swift
@@ -0,0 +1,226 @@
+import Foundation
+
+public enum AlignItems: Int {
+ case flexStart
+ case flexEnd
+ case center
+ case baseline
+ case stretch
+}
+
+public enum AlignSelf: Int {
+ case auto
+ case flexStart
+ case flexEnd
+ case center
+ case baseline
+ case stretch
+}
+
+public enum AlignContent: Int {
+ case flexStart
+ case flexEnd
+ case center
+ case stretch
+ case spaceBetween
+ case spaceAround
+}
+
+public enum Direction: Int {
+ case inherit
+ case ltr
+ case rtl
+}
+
+public enum Display: Int {
+ case flex
+ case none
+}
+
+public enum FlexDirection: Int {
+ case row
+ case column
+ case rowReverse
+ case columnReverse
+}
+
+public enum JustifyContent: Int {
+ case flexStart
+ case flexEnd
+ case center
+ case spaceBetween
+ case spaceAround
+ case spaceEvenly
+}
+
+public enum Overflow: Int {
+ case visible
+ case hidden
+ case scroll
+}
+
+public enum PositionType: Int {
+ case relative
+ case absolute
+}
+
+public enum FlexWrap: Int {
+ case noWrap
+ case wrap
+ case wrapReverse
+}
+
+public enum Dimension {
+ case points(Float)
+ case percent(Float)
+ case auto
+ case undefined
+
+ fileprivate func intoStretchValue() -> StretchStyleDimension {
+ switch self {
+ case .points(let value): return StretchStyleDimension(dimen_type: 0, dimen_value: value)
+ case .percent(let value): return StretchStyleDimension(dimen_type: 1, dimen_value: value)
+ case .auto: return StretchStyleDimension(dimen_type: 2, dimen_value: 0.0)
+ case .undefined: return StretchStyleDimension(dimen_type: 3, dimen_value: 0.0)
+ }
+ }
+}
+
+public struct Size<T> {
+ public let width: T
+ public let height: T
+
+ public init(width: T, height: T) {
+ self.width = width
+ self.height = height
+ }
+}
+
+public struct Rect<T> {
+ public let start: T
+ public let end: T
+ public let top: T
+ public let bottom: T
+
+ public init(start: T, end: T, top: T, bottom: T) {
+ self.start = start
+ self.end = end
+ self.top = top
+ self.bottom = bottom
+ }
+}
+
+public class Style {
+ internal let rustptr: UnsafeMutableRawPointer
+
+ public let display: Display
+ public let positionType: PositionType
+ public let direction: Direction
+ public let flexDirection: FlexDirection
+ public let flexWrap: FlexWrap
+ public let overflow: Overflow
+ public let alignItems: AlignItems
+ public let alignSelf: AlignSelf
+ public let alignContent: AlignContent
+ public let justifyContent: JustifyContent
+ public let position: Rect<Dimension>
+ public let margin: Rect<Dimension>
+ public let padding: Rect<Dimension>
+ public let border: Rect<Dimension>
+ public let flexGrow: Float
+ public let flexShrink: Float
+ public let flexBasis: Dimension
+ public let size: Size<Dimension>
+ public let minSize: Size<Dimension>
+ public let maxSize: Size<Dimension>
+ public let aspectRatio: Float?
+
+ public init(
+ display: Display = .flex,
+ positionType: PositionType = .relative,
+ direction: Direction = .inherit,
+ flexDirection: FlexDirection = .row,
+ flexWrap: FlexWrap = .noWrap,
+ overflow: Overflow = .hidden,
+ alignItems: AlignItems = .stretch,
+ alignSelf: AlignSelf = .auto,
+ alignContent: AlignContent = .flexStart,
+ justifyContent: JustifyContent = .flexStart,
+ position: Rect<Dimension> = Rect(start: .undefined, end: .undefined, top: .undefined, bottom: .undefined),
+ margin: Rect<Dimension> = Rect(start: .undefined, end: .undefined, top: .undefined, bottom: .undefined),
+ padding: Rect<Dimension> = Rect(start: .undefined, end: .undefined, top: .undefined, bottom: .undefined),
+ border: Rect<Dimension> = Rect(start: .undefined, end: .undefined, top: .undefined, bottom: .undefined),
+ flexGrow: Float = 0.0,
+ flexShrink: Float = 1.0,
+ flexBasis: Dimension = .auto,
+ size: Size<Dimension> = Size(width: .auto, height: .auto),
+ minSize: Size<Dimension> = Size(width: .auto, height: .auto),
+ maxSize: Size<Dimension> = Size(width: .auto, height: .auto),
+ aspectRatio: Float? = nil
+ ) {
+ self.display = display
+ self.positionType = positionType
+ self.direction = direction
+ self.flexDirection = flexDirection
+ self.flexWrap = flexWrap
+ self.overflow = overflow
+ self.alignItems = alignItems
+ self.alignSelf = alignSelf
+ self.alignContent = alignContent
+ self.justifyContent = justifyContent
+ self.position = position
+ self.margin = margin
+ self.padding = padding
+ self.border = border
+ self.flexGrow = flexGrow
+ self.flexShrink = flexShrink
+ self.flexBasis = flexBasis
+ self.size = size
+ self.minSize = minSize
+ self.maxSize = maxSize
+ self.aspectRatio = aspectRatio
+
+ self.rustptr = stretch_style_create(
+ Int32(display.rawValue),
+ Int32(positionType.rawValue),
+ Int32(direction.rawValue),
+ Int32(flexDirection.rawValue),
+ Int32(flexWrap.rawValue),
+ Int32(overflow.rawValue),
+ Int32(alignItems.rawValue),
+ Int32(alignSelf.rawValue),
+ Int32(alignContent.rawValue),
+ Int32(justifyContent.rawValue),
+ StretchStyleRect(
+ start: position.start.intoStretchValue(),
+ end: position.end.intoStretchValue(),
+ top: position.top.intoStretchValue(),
+ bottom: position.bottom.intoStretchValue()
+ ),
+ StretchStyleRect(
+ start: margin.start.intoStretchValue(),
+ end: margin.end.intoStretchValue(),
+ top: margin.top.intoStretchValue(),
+ bottom: margin.bottom.intoStretchValue()
+ ),
+ StretchStyleRect(
+ start: padding.start.intoStretchValue(),
+ end: padding.end.intoStretchValue(),
+ top: padding.top.intoStretchValue(),
+ bottom: padding.bottom.intoStretchValue()
+ ),
+ StretchStyleRect(
+ start: border.start.intoStretchValue(),
+ end: border.end.intoStretchValue(),
+ top: border.top.intoStretchValue(),
+ bottom: border.bottom.intoStretchValue()
+ ),
+ flexGrow,
+ flexShrink,
+ flexBasis.intoStretchValue(),
+ StretchStyleSize(width: size.width.intoStretchValue(), height: size.height.intoStretchValue()),
+ StretchStyleSize(width: minSize.width.intoStretchValue(), height: minSize.height.intoStretchValue()),
+ StretchStyleSize(width: maxSize.width.intoStretchValue(), height: maxSize.height.intoStretchValue()),
+ aspectRatio ?? Float.nan)
+ }
+}
diff --git a/bindings/swift/StretchKit/Headers/libstretch.h b/bindings/swift/StretchKit/Headers/libstretch.h
new file mode 100644
index 000000000..fda8b4b72
--- /dev/null
+++ b/bindings/swift/StretchKit/Headers/libstretch.h
@@ -0,0 +1,76 @@
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+typedef struct {
+ float width;
+ float height;
+} StretchSize;
+
+typedef struct {
+ int32_t dimen_type;
+ float dimen_value;
+} StretchStyleDimension;
+
+typedef struct {
+ StretchStyleDimension start;
+ StretchStyleDimension end;
+ StretchStyleDimension top;
+ StretchStyleDimension bottom;
+} StretchStyleRect;
+
+typedef struct {
+ StretchStyleDimension width;
+ StretchStyleDimension height;
+} StretchStyleSize;
+
+void stretch_node_add_child(void *node, void *child);
+
+void *stretch_node_compute_layout(void *node,
+ float width,
+ float height,
+ void *(*create_layout)(const float*));
+
+void *stretch_node_create(void *style);
+
+bool stretch_node_dirty(void *node);
+
+void stretch_node_free(void *node);
+
+void stretch_node_mark_dirty(void *node);
+
+void stretch_node_remove_child(void *node, void *child);
+
+void stretch_node_remove_child_at_index(void *node, uintptr_t index);
+
+void stretch_node_replace_child_at_index(void *node, uintptr_t index, void *child);
+
+void stretch_node_set_measure(void *node,
+ void *swift_ptr,
+ StretchSize (*measure)(const void*, float, float));
+
+void stretch_node_set_style(void *node, void *style);
+
+void *stretch_style_create(int32_t display,
+ int32_t position_type,
+ int32_t direction,
+ int32_t flex_direction,
+ int32_t flex_wrap,
+ int32_t overflow,
+ int32_t align_items,
+ int32_t align_self,
+ int32_t align_content,
+ int32_t justify_content,
+ StretchStyleRect position,
+ StretchStyleRect margin,
+ StretchStyleRect padding,
+ StretchStyleRect border,
+ float flex_grow,
+ float flex_shrink,
+ StretchStyleDimension flex_basis,
+ StretchStyleSize size,
+ StretchStyleSize min_size,
+ StretchStyleSize max_size,
+ float aspect_ratio);
+
+void stretch_style_free(void *style);
diff --git a/bindings/swift/StretchKit/Libraries/libstretch.a b/bindings/swift/StretchKit/Libraries/libstretch.a
new file mode 100644
index 000000000..ea2ecb13a
Binary files /dev/null and b/bindings/swift/StretchKit/Libraries/libstretch.a differ
diff --git a/bindings/swift/install_libraries.sh b/bindings/swift/install_libraries.sh
new file mode 100755
index 000000000..d5e470304
--- /dev/null
+++ b/bindings/swift/install_libraries.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+STRETCHKIT=../StretchKit
+
+cd $(dirname $0)/StretchCore
+cargo lipo --release
+rm -rf $STRETCHKIT/Libraries $STRETCHKIT/Headers
+mkdir $STRETCHKIT/Libraries $STRETCHKIT/Headers
+cp target/universal/release/libstretch.a $STRETCHKIT/Libraries/libstretch.a
+cbindgen . -o $STRETCHKIT/Headers/libstretch.h -l c
\ No newline at end of file