diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 1ec26ae..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "PathKit"] - path = PathKit - url = https://github.com/kylef/PathKit diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6fa999a..0000000 --- a/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: objective-c -osx_image: xcode61 -before_install: -- gem install cocoapods --pre -- gem install xcpretty -script: -- set -o pipefail -- xcodebuild -project Stencil.xcodeproj -scheme Stencil test | xcpretty -c -- xcodebuild -project Stencil.xcodeproj -scheme Stencil test -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty -c -- pod lib lint --quick diff --git a/Configurations/UniversalFramework_Base.xcconfig b/Configurations/UniversalFramework_Base.xcconfig deleted file mode 100644 index 9248142..0000000 --- a/Configurations/UniversalFramework_Base.xcconfig +++ /dev/null @@ -1,18 +0,0 @@ -// -// UniversalFramework_Base.xcconfig -// Stencil -// -// Created by Marius Rackwitz on 29/11/14. -// Copyright (c) 2014 Marius Rackwitz. All rights reserved. -// - -// Make it universal -SUPPORTED_PLATFORMS = iphonesimulator iphoneos macosx -VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s -VALID_ARCHS[sdk=iphonesimulator*] = arm64 armv7 armv7s -VALID_ARCHS[sdk=macosx*] = i386 x86_64 - -// Dynamic linking uses different default copy paths -LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' diff --git a/Configurations/UniversalFramework_Framework.xcconfig b/Configurations/UniversalFramework_Framework.xcconfig deleted file mode 100644 index e957478..0000000 --- a/Configurations/UniversalFramework_Framework.xcconfig +++ /dev/null @@ -1,18 +0,0 @@ -// -// UniversalFramework_Framework.xcconfig -// Stencil -// -// Created by Marius Rackwitz on 29/11/14. -// Copyright (c) 2014 Marius Rackwitz. All rights reserved. -// - -#include "UniversalFramework_Base.xcconfig" - -// iOS-specific default settings -CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer -TARGETED_DEVICE_FAMILY[sdk=iphonesimulator*] = 1,2 -TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2 - -// OSX-specific default settings -FRAMEWORK_VERSION[sdk=macosx*] = A -COMBINE_HIDPI_IMAGES[sdk=macosx*] = YES diff --git a/Configurations/UniversalFramework_Test.xcconfig b/Configurations/UniversalFramework_Test.xcconfig deleted file mode 100644 index 8230bed..0000000 --- a/Configurations/UniversalFramework_Test.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -// -// UniversalFramework_Test.xcconfig -// Stencil -// -// Created by Marius Rackwitz on 29/11/14. -// Copyright (c) 2014 Marius Rackwitz. All rights reserved. -// - -#include "UniversalFramework_Base.xcconfig" - -FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '$(SDKROOT)/Developer/Library/Frameworks' -FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '$(SDKROOT)/Developer/Library/Frameworks' -FRAMEWORK_SEARCH_PATHS[sdk=macosx*] = $(inherited) '$(DEVELOPER_FRAMEWORKS_DIR)' - -// Yep. -LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' \ No newline at end of file diff --git a/PathKit b/PathKit deleted file mode 160000 index fe8fcbe..0000000 --- a/PathKit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fe8fcbe836000b752d1fefdaac2b49c96c298004 diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..86d002e --- /dev/null +++ b/Podfile @@ -0,0 +1,10 @@ +use_frameworks! + +target 'Stencil' do + podspec +end + +target 'StencilTests' do + podspec +end + diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..c356d19 --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,10 @@ +PODS: + - PathKit (0.3.0) + +DEPENDENCIES: + - PathKit (~> 0.3.0) + +SPEC CHECKSUMS: + PathKit: 0f4d1becb7002e3cd62a1583ce8de964d57485ce + +COCOAPODS: 0.37.2 diff --git a/README.md b/README.md index 54e482b..cc1c687 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,12 @@ Stencil ======= -[![Build Status](http://img.shields.io/travis/kylef/Stencil/master.svg?style=flat)](https://travis-ci.org/kylef/Stencil) +[![Build Status](http://img.shields.io/circleci/project/kylef/Stencil/master.svg](https://circleci.com/gh/kylef/Stencil) Stencil is a simple and powerful template language for Swift. It provides a syntax similar to Django and Mustache. If you're familiar with these, you will feel right at home with Stencil. -*NOTE: Stencil requires Xcode 6.1.* - ### Example ```html+django @@ -40,16 +38,12 @@ switch result { ## Installation -Installation with CocoaPods is recommended using CocoaPods 0.36. +Installation with CocoaPods is recommended. ```ruby pod 'Stencil' ``` -### Sub-projects - -Alternatively, you can clone Stencil via git or as a submodule and include `Stencil.xcodeproj` inside your project and add `Stencil.framework` as a target dependency. - ## Philosophy Stencil follows the same philosophy of Django: diff --git a/Stencil.podspec b/Stencil.podspec index cb1effb..5ecb1c8 100644 --- a/Stencil.podspec +++ b/Stencil.podspec @@ -7,8 +7,10 @@ Pod::Spec.new do |spec| spec.author = { 'Kyle Fuller' => 'inbox@kylefuller.co.uk' } spec.social_media_url = 'http://twitter.com/kylefuller' spec.source = { :git => 'https://github.com/kylef/Stencil.git', :tag => "#{spec.version}" } - spec.source_files = 'Stencil/*.{h,swift}' + spec.source_files = 'Stencil/*.swift', 'Stencil/TemplateLoader/*.swift' + spec.ios.deployment_target = '8.0' + spec.osx.deployment_target = '10.9' spec.requires_arc = true - spec.dependency 'PathKit' + spec.dependency 'PathKit', '~> 0.3.0' end diff --git a/Stencil.xcodeproj/project.pbxproj b/Stencil.xcodeproj/project.pbxproj index 5bb7515..c61a48f 100644 --- a/Stencil.xcodeproj/project.pbxproj +++ b/Stencil.xcodeproj/project.pbxproj @@ -7,14 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 1474245D3CE34A8BC76F8D20 /* Pods_StencilTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40E4E61A4F4EA12FE3FA6E39 /* Pods_StencilTests.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 27CE0ADE1A50BEC3004A105B /* TemplateLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CE0ADD1A50BEC3004A105B /* TemplateLoader.swift */; }; 27CE0AE01A50BF05004A105B /* TemplateLoaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CE0ADF1A50BF05004A105B /* TemplateLoaderTests.swift */; }; 27CE0AFA1A50C963004A105B /* test.html in Resources */ = {isa = PBXBuildFile; fileRef = 27CE0AF91A50C963004A105B /* test.html */; }; 27CE0B011A50CBD1004A105B /* Include.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CE0B001A50CBD1004A105B /* Include.swift */; }; 27CE0B041A50CBEA004A105B /* IncludeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CE0B031A50CBEA004A105B /* IncludeTests.swift */; }; - 27E2138D1A4CD5F50073E063 /* UniversalFramework_Base.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 27E2138A1A4CD5F50073E063 /* UniversalFramework_Base.xcconfig */; }; - 27E2138E1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 27E2138B1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig */; }; - 27E2138F1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 27E2138C1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig */; }; + 32C6976B95F3D42995990054 /* Pods_Stencil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A574F1600267822AA34CB00 /* Pods_Stencil.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 71CE4C0A19FD29D000B9E0C5 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CE4C0919FD29D000B9E0C5 /* Result.swift */; }; 7725B3CB19F92B4F002CF74B /* VariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7725B3CA19F92B4F002CF74B /* VariableTests.swift */; }; 7725B3CD19F92B61002CF74B /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7725B3CC19F92B61002CF74B /* Variable.swift */; }; @@ -35,27 +34,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 27CE0AE61A50BFAF004A105B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 77DCBACA1A1E2A750054C841; - remoteInfo = PathKit; - }; - 27CE0AE81A50BFAF004A105B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 77DCBAD51A1E2A750054C841; - remoteInfo = PathKitTests; - }; - 27CE0AEA1A50BFBF004A105B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 77DCBAC91A1E2A750054C841; - remoteInfo = PathKit; - }; 27CE0AF51A50C292004A105B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 77FAAE4919F91E480029DC5E /* Project object */; @@ -63,25 +41,17 @@ remoteGlobalIDString = 77FAAE5119F91E480029DC5E; remoteInfo = Stencil; }; - 27CE0AF71A50C299004A105B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 77DCBAC91A1E2A750054C841; - remoteInfo = PathKit; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 216AE96E764D5BD92D11049B /* Pods-Stencil.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stencil.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Stencil/Pods-Stencil.debug.xcconfig"; sourceTree = ""; }; 27CE0ADD1A50BEC3004A105B /* TemplateLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateLoader.swift; sourceTree = ""; }; 27CE0ADF1A50BF05004A105B /* TemplateLoaderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateLoaderTests.swift; sourceTree = ""; }; - 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PathKit.xcodeproj; path = PathKit/PathKit.xcodeproj; sourceTree = ""; }; 27CE0AF91A50C963004A105B /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; 27CE0B001A50CBD1004A105B /* Include.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Include.swift; sourceTree = ""; }; 27CE0B031A50CBEA004A105B /* IncludeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IncludeTests.swift; sourceTree = ""; }; - 27E2138A1A4CD5F50073E063 /* UniversalFramework_Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = UniversalFramework_Base.xcconfig; sourceTree = ""; }; - 27E2138B1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = UniversalFramework_Framework.xcconfig; sourceTree = ""; }; - 27E2138C1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = UniversalFramework_Test.xcconfig; sourceTree = ""; }; + 40E4E61A4F4EA12FE3FA6E39 /* Pods_StencilTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_StencilTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 604897C26D7C87809187940C /* Pods-StencilTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StencilTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-StencilTests/Pods-StencilTests.release.xcconfig"; sourceTree = ""; }; 71CE4C0919FD29D000B9E0C5 /* Result.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = ""; }; 7725B3CA19F92B4F002CF74B /* VariableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VariableTests.swift; sourceTree = ""; }; 7725B3CC19F92B61002CF74B /* Variable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Variable.swift; sourceTree = ""; }; @@ -102,6 +72,9 @@ 77FAAE6419F91E480029DC5E /* StencilTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StencilTests.swift; sourceTree = ""; }; 77FAAE6E19F920750029DC5E /* Context.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Context.swift; sourceTree = ""; }; 77FAAE7019F9208C0029DC5E /* ContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextTests.swift; sourceTree = ""; }; + 7A574F1600267822AA34CB00 /* Pods_Stencil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Stencil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4451BEDB5F71116FF3216CC /* Pods-Stencil.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stencil.release.xcconfig"; path = "Pods/Target Support Files/Pods-Stencil/Pods-Stencil.release.xcconfig"; sourceTree = ""; }; + AB71617F99ED5A669D83419F /* Pods-StencilTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StencilTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-StencilTests/Pods-StencilTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -109,6 +82,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32C6976B95F3D42995990054 /* Pods_Stencil.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -117,21 +91,13 @@ buildActionMask = 2147483647; files = ( 77FAAE5E19F91E480029DC5E /* Stencil.framework in Frameworks */, + 1474245D3CE34A8BC76F8D20 /* Pods_StencilTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27CE0AE21A50BFAF004A105B /* Products */ = { - isa = PBXGroup; - children = ( - 27CE0AE71A50BFAF004A105B /* PathKit.framework */, - 27CE0AE91A50BFAF004A105B /* PathKitTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; 27CE0AFF1A50CBBF004A105B /* TemplateLoader */ = { isa = PBXGroup; children = ( @@ -148,24 +114,14 @@ path = TemplateLoader; sourceTree = ""; }; - 27E213891A4CD5F50073E063 /* Configurations */ = { - isa = PBXGroup; - children = ( - 27E2138A1A4CD5F50073E063 /* UniversalFramework_Base.xcconfig */, - 27E2138B1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig */, - 27E2138C1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig */, - ); - path = Configurations; - sourceTree = SOURCE_ROOT; - }; 77FAAE4819F91E480029DC5E = { isa = PBXGroup; children = ( - 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */, 77FAAE5419F91E480029DC5E /* Stencil */, 77FAAE6119F91E480029DC5E /* StencilTests */, - 27E213891A4CD5F50073E063 /* Configurations */, 77FAAE5319F91E480029DC5E /* Products */, + F0837D60120FB15CC00B9EBD /* Pods */, + BE2E2DF8F488C4669126E920 /* Frameworks */, ); sourceTree = ""; }; @@ -231,6 +187,26 @@ name = "Supporting Files"; sourceTree = ""; }; + BE2E2DF8F488C4669126E920 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7A574F1600267822AA34CB00 /* Pods_Stencil.framework */, + 40E4E61A4F4EA12FE3FA6E39 /* Pods_StencilTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F0837D60120FB15CC00B9EBD /* Pods */ = { + isa = PBXGroup; + children = ( + 216AE96E764D5BD92D11049B /* Pods-Stencil.debug.xcconfig */, + A4451BEDB5F71116FF3216CC /* Pods-Stencil.release.xcconfig */, + AB71617F99ED5A669D83419F /* Pods-StencilTests.debug.xcconfig */, + 604897C26D7C87809187940C /* Pods-StencilTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -249,15 +225,16 @@ isa = PBXNativeTarget; buildConfigurationList = 77FAAE6819F91E480029DC5E /* Build configuration list for PBXNativeTarget "Stencil" */; buildPhases = ( + 2F5F764C3F2D9B507C32F902 /* Check Pods Manifest.lock */, 77FAAE4D19F91E480029DC5E /* Sources */, 77FAAE4E19F91E480029DC5E /* Frameworks */, 77FAAE4F19F91E480029DC5E /* Headers */, 77FAAE5019F91E480029DC5E /* Resources */, + 99E82E6639BC7C1A0E1E28DC /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( - 27CE0AEB1A50BFBF004A105B /* PBXTargetDependency */, ); name = Stencil; productName = Stencil; @@ -268,14 +245,16 @@ isa = PBXNativeTarget; buildConfigurationList = 77FAAE6B19F91E480029DC5E /* Build configuration list for PBXNativeTarget "StencilTests" */; buildPhases = ( + 2D3D90E839235D400843A900 /* Check Pods Manifest.lock */, 77FAAE5919F91E480029DC5E /* Sources */, 77FAAE5A19F91E480029DC5E /* Frameworks */, 77FAAE5B19F91E480029DC5E /* Resources */, + A3AAD60B3C344DD6993AE800 /* Embed Pods Frameworks */, + BD3457ACA3F28092E2EBD7C4 /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( - 27CE0AF81A50C299004A105B /* PBXTargetDependency */, 27CE0AF61A50C292004A105B /* PBXTargetDependency */, ); name = StencilTests; @@ -289,7 +268,7 @@ 77FAAE4919F91E480029DC5E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + LastUpgradeCheck = 0630; ORGANIZATIONNAME = Cocode; TargetAttributes = { 77FAAE5119F91E480029DC5E = { @@ -310,12 +289,6 @@ mainGroup = 77FAAE4819F91E480029DC5E; productRefGroup = 77FAAE5319F91E480029DC5E /* Products */; projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 27CE0AE21A50BFAF004A105B /* Products */; - ProjectRef = 27CE0AE11A50BFAF004A105B /* PathKit.xcodeproj */; - }, - ); projectRoot = ""; targets = ( 77FAAE5119F91E480029DC5E /* Stencil */, @@ -324,31 +297,11 @@ }; /* End PBXProject section */ -/* Begin PBXReferenceProxy section */ - 27CE0AE71A50BFAF004A105B /* PathKit.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PathKit.framework; - remoteRef = 27CE0AE61A50BFAF004A105B /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 27CE0AE91A50BFAF004A105B /* PathKitTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = PathKitTests.xctest; - remoteRef = 27CE0AE81A50BFAF004A105B /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - /* Begin PBXResourcesBuildPhase section */ 77FAAE5019F91E480029DC5E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27E2138F1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig in Resources */, - 27E2138E1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig in Resources */, - 27E2138D1A4CD5F50073E063 /* UniversalFramework_Base.xcconfig in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -362,6 +315,84 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 2D3D90E839235D400843A900 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 2F5F764C3F2D9B507C32F902 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 99E82E6639BC7C1A0E1E28DC /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Stencil/Pods-Stencil-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + A3AAD60B3C344DD6993AE800 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StencilTests/Pods-StencilTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BD3457ACA3F28092E2EBD7C4 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StencilTests/Pods-StencilTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 77FAAE4D19F91E480029DC5E /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -399,21 +430,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 27CE0AEB1A50BFBF004A105B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PathKit; - targetProxy = 27CE0AEA1A50BFBF004A105B /* PBXContainerItemProxy */; - }; 27CE0AF61A50C292004A105B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 77FAAE5119F91E480029DC5E /* Stencil */; targetProxy = 27CE0AF51A50C292004A105B /* PBXContainerItemProxy */; }; - 27CE0AF81A50C299004A105B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PathKit; - targetProxy = 27CE0AF71A50C299004A105B /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -500,7 +521,7 @@ }; 77FAAE6919F91E480029DC5E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 27E2138B1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig */; + baseConfigurationReference = 216AE96E764D5BD92D11049B /* Pods-Stencil.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; @@ -511,6 +532,7 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = Stencil/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -519,7 +541,7 @@ }; 77FAAE6A19F91E480029DC5E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 27E2138B1A4CD5F50073E063 /* UniversalFramework_Framework.xcconfig */; + baseConfigurationReference = A4451BEDB5F71116FF3216CC /* Pods-Stencil.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; @@ -530,6 +552,7 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = Stencil/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -537,24 +560,34 @@ }; 77FAAE6C19F91E480029DC5E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 27E2138C1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig */; + baseConfigurationReference = AB71617F99ED5A669D83419F /* Pods-StencilTests.debug.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = StencilTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 77FAAE6D19F91E480029DC5E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 27E2138C1A4CD5F50073E063 /* UniversalFramework_Test.xcconfig */; + baseConfigurationReference = 604897C26D7C87809187940C /* Pods-StencilTests.release.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); INFOPLIST_FILE = StencilTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/Stencil.xcodeproj/xcshareddata/xcschemes/Stencil.xcscheme b/Stencil.xcodeproj/xcshareddata/xcschemes/Stencil.xcscheme index 220cf8f..073930f 100644 --- a/Stencil.xcodeproj/xcshareddata/xcschemes/Stencil.xcscheme +++ b/Stencil.xcodeproj/xcshareddata/xcschemes/Stencil.xcscheme @@ -1,6 +1,6 @@ + + + + + + diff --git a/Stencil/Lexer.swift b/Stencil/Lexer.swift index 263b31e..0d5e8e0 100644 --- a/Stencil/Lexer.swift +++ b/Stencil/Lexer.swift @@ -31,7 +31,7 @@ public struct Lexer { var tokens = [Token]() - let range = NSMakeRange(0, countElements(templateString)) + let range = NSMakeRange(0, count(templateString)) var lastIndex = 0 let nsTemplateString = templateString as NSString let options = NSMatchingOptions(0) @@ -47,7 +47,7 @@ public struct Lexer { lastIndex = result.range.location + result.range.length } - if lastIndex < countElements(templateString) { + if lastIndex < count(templateString) { let substring = (templateString as NSString).substringFromIndex(lastIndex) tokens.append(Token.Text(value: substring)) } diff --git a/Stencil/Node.swift b/Stencil/Node.swift index 6ed02f2..262e8aa 100644 --- a/Stencil/Node.swift +++ b/Stencil/Node.swift @@ -148,9 +148,8 @@ public class ForNode : Node { public class func parse(parser:TokenParser, token:Token) -> TokenParser.Result { let components = token.components() - let count = countElements(components) - if count == 4 && components[2] == "in" { + if count(components) == 4 && components[2] == "in" { let loopVariable = components[1] let variable = components[3] @@ -161,7 +160,7 @@ public class ForNode : Node { case .Success(let nodes): forNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } if let token = parser.nextToken() { @@ -170,7 +169,7 @@ public class ForNode : Node { case .Success(let nodes): emptyNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } parser.nextToken() @@ -229,7 +228,7 @@ public class IfNode : Node { case .Success(let nodes): trueNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } if let token = parser.nextToken() { @@ -238,7 +237,7 @@ public class IfNode : Node { case .Success(let nodes): falseNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } parser.nextToken() } @@ -258,7 +257,7 @@ public class IfNode : Node { case .Success(let nodes): falseNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } if let token = parser.nextToken() { @@ -267,7 +266,7 @@ public class IfNode : Node { case .Success(let nodes): trueNodes = nodes case .Error(let error): - return .Error(error) + return .Error(error: error) } parser.nextToken() } diff --git a/Stencil/Parser.swift b/Stencil/Parser.swift index 021e9f1..536505d 100644 --- a/Stencil/Parser.swift +++ b/Stencil/Parser.swift @@ -32,11 +32,11 @@ public class TokenParser { public init(tokens:[Token]) { self.tokens = tokens - registerTag("for", ForNode.parse) - registerTag("if", IfNode.parse) - registerTag("ifnot", IfNode.parse_ifnot) - registerTag("now", NowNode.parse) - registerTag("include", IncludeNode.parse) + registerTag("for", parser: ForNode.parse) + registerTag("if", parser: IfNode.parse) + registerTag("ifnot", parser: IfNode.parse_ifnot) + registerTag("now", parser: NowNode.parse) + registerTag("include", parser: IncludeNode.parse) } /// Registers a new template tag diff --git a/Stencil/Template.swift b/Stencil/Template.swift index ec7eca3..9bf437a 100644 --- a/Stencil/Template.swift +++ b/Stencil/Template.swift @@ -28,7 +28,7 @@ public class Template { var error:NSError? let maybeTemplateString = NSString(contentsOfURL: URL, encoding: NSUTF8StringEncoding, error: &error) if let templateString = maybeTemplateString { - self.init(templateString:templateString) + self.init(templateString:templateString as String) } else { self.init(templateString:"") return nil diff --git a/Stencil/Variable.swift b/Stencil/Variable.swift index 7e090f9..70e5d9d 100644 --- a/Stencil/Variable.swift +++ b/Stencil/Variable.swift @@ -35,7 +35,7 @@ public struct Variable : Equatable { } else if bit == "last" { current = array.last } else if bit == "count" { - current = countElements(array) + current = count(array) } } else if let object = current as? NSObject { current = object.valueForKey(bit) diff --git a/StencilTests/ContextTests.swift b/StencilTests/ContextTests.swift index 3e56091..1b132a4 100644 --- a/StencilTests/ContextTests.swift +++ b/StencilTests/ContextTests.swift @@ -10,14 +10,14 @@ class ContextTests: XCTestCase { } func testItAllowsYouToRetrieveAValue() { - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Kyle") } func testItAllowsYouToSetValue() { context["name"] = "Katie" - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Katie") } @@ -29,7 +29,7 @@ class ContextTests: XCTestCase { func testItAllowsYouToRetrieveAValueFromParent() { context.push() - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Kyle") } @@ -37,7 +37,7 @@ class ContextTests: XCTestCase { context.push() context["name"] = "Katie" - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Katie") } @@ -46,20 +46,20 @@ class ContextTests: XCTestCase { context["name"] = "Katie" context.pop() - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Kyle") } func testItAllowsYouToPushADictionaryToTheStack() { context.push(["name": "Katie"]) - let name = context["name"] as String! + let name = context["name"] as! String XCTAssertEqual(name, "Katie") } func testItAllowsYouToCompareTwoContextsForEquality() { let otherContext = Context(dictionary: ["name": "Kyle"]) - XCTAssertEqual(otherContext, context ) + XCTAssertEqual(otherContext, context) } } diff --git a/StencilTests/NodeTests.swift b/StencilTests/NodeTests.swift index 9ffded4..56c4c0d 100644 --- a/StencilTests/NodeTests.swift +++ b/StencilTests/NodeTests.swift @@ -119,9 +119,9 @@ class IfNodeTests: NodeTests { let parser = TokenParser(tokens: tokens) assertSuccess(parser.parse()) { nodes in - let node = nodes.first! as IfNode - let trueNode = node.trueNodes.first! as TextNode - let falseNode = node.falseNodes.first! as TextNode + let node = nodes.first as! IfNode + let trueNode = node.trueNodes.first as! TextNode + let falseNode = node.falseNodes.first as! TextNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.variable.variable, "value") @@ -143,9 +143,9 @@ class IfNodeTests: NodeTests { let parser = TokenParser(tokens: tokens) assertSuccess(parser.parse()) { nodes in - let node = nodes.first! as IfNode - let trueNode = node.trueNodes.first! as TextNode - let falseNode = node.falseNodes.first! as TextNode + let node = nodes.first as! IfNode + let trueNode = node.trueNodes.first as! TextNode + let falseNode = node.falseNodes.first as! TextNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.variable.variable, "value") @@ -211,7 +211,7 @@ class NowNodeTests: NodeTests { let parser = TokenParser(tokens: tokens) assertSuccess(parser.parse()) { nodes in - let node = nodes.first! as NowNode + let node = nodes.first as! NowNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.format.variable, "\"yyyy-MM-dd 'at' HH:mm\"") } @@ -222,7 +222,7 @@ class NowNodeTests: NodeTests { let parser = TokenParser(tokens: tokens) assertSuccess(parser.parse()) { nodes in - let node = nodes.first! as NowNode + let node = nodes.first as! NowNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.format.variable, "\"HH:mm\"") } diff --git a/StencilTests/ParserTests.swift b/StencilTests/ParserTests.swift index 3cb399e..c338349 100644 --- a/StencilTests/ParserTests.swift +++ b/StencilTests/ParserTests.swift @@ -9,7 +9,7 @@ class TokenParserTests: XCTestCase { ]) assertSuccess(parser.parse()) { nodes in - let node = nodes.first as TextNode! + let node = nodes.first as! TextNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.text, "Hello World") } @@ -21,7 +21,7 @@ class TokenParserTests: XCTestCase { ]) assertSuccess(parser.parse()) { nodes in - let node = nodes.first as VariableNode! + let node = nodes.first as! VariableNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.variable, Variable("name")) } diff --git a/StencilTests/TemplateLoader/IncludeTests.swift b/StencilTests/TemplateLoader/IncludeTests.swift index 5fcb5ba..7336d4c 100644 --- a/StencilTests/TemplateLoader/IncludeTests.swift +++ b/StencilTests/TemplateLoader/IncludeTests.swift @@ -28,7 +28,7 @@ class IncludeTests: NodeTests { let parser = TokenParser(tokens: tokens) assertSuccess(parser.parse()) { nodes in - let node = nodes.first! as IncludeNode + let node = nodes.first as! IncludeNode XCTAssertEqual(nodes.count, 1) XCTAssertEqual(node.templateName, "test.html") } diff --git a/StencilTests/VariableTests.swift b/StencilTests/VariableTests.swift index 3b26323..c1a7630 100644 --- a/StencilTests/VariableTests.swift +++ b/StencilTests/VariableTests.swift @@ -20,43 +20,43 @@ class VariableTests: XCTestCase { func testResolvingStringLiteral() { let variable = Variable("\"name\"") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "name") } func testResolvingVariable() { let variable = Variable("name") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "Kyle") } func testResolvingItemFromDictionary() { let variable = Variable("profiles.github") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "kylef") } func testResolvingItemFromArrayWithIndex() { let variable = Variable("contacts.0") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "Katie") } func testResolvingFirstItemFromArray() { let variable = Variable("contacts.first") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "Katie") } func testResolvingLastItemFromArray() { let variable = Variable("contacts.last") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "Orta") } func testResolvingValueViaKVO() { let variable = Variable("object.title") - let result = variable.resolve(context) as String! + let result = variable.resolve(context) as! String XCTAssertEqual(result, "Hello World") } } diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..669295d --- /dev/null +++ b/circle.yml @@ -0,0 +1,8 @@ +machine: + xcode: + version: "6.3.1" + +test: + override: + - set -o pipefail && xcodebuild -workspace Stencil.xcworkspace -scheme Stencil test | tee $CIRCLE_ARTIFACTS/xcode_raw_ios.log | xcpretty -c + - pod lib lint