ios_toolchain 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f84794867ff43111e9f296a22f96c1ffca6f803b
4
- data.tar.gz: 86b174307c5d06bd0dcd8c5a654f8c4afe244836
3
+ metadata.gz: 97f72a22613e5c4bcfe1a313980f51ca3daebf9c
4
+ data.tar.gz: d850802d0f51dc85fd2615e83797b919547ed2a4
5
5
  SHA512:
6
- metadata.gz: 1b0018a4d9d996ed8fb0ab83acb00b82d78587638c783e06fdfa9daf2d25ee264c50c2090f98247a6c43580337aa1557075aa9a644158635520631a35ebae954
7
- data.tar.gz: c559444b4c83e34448cfa0f31a8a9d7bc3c5ef14a312e4980d7c5a5c18bda438595999b40dd6ee48c3c31341433ac39a8942f10b52afce126e2a34a4e2143c43
6
+ metadata.gz: 4ce2d66b9f43486eea853abd3d2572e135bea580a8a2324d4c0f4aeb0054d80470e93bb1f79ff50a144a19575b60f0efb162be70f8cdb090d263148170910d60
7
+ data.tar.gz: 04a9c2f9689d93a241d101d554dcd384108a25138312ed7e06e6301febf2d0e505e70b083cc3cf1fd238838c8584fc73cde66ba48228cfa5474de07e74be16df
data/.gitignore CHANGED
@@ -2,6 +2,8 @@
2
2
  #
3
3
  # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4
4
 
5
+ .idea/
6
+
5
7
  ## Build generated
6
8
  build/
7
9
  DerivedData/
data/README.md CHANGED
@@ -58,7 +58,7 @@ This is the full list of available tasks, as output by `rake -T`:
58
58
  rake ios:tidy:specs # Unfocusses any focussed Quick specs
59
59
  rake ios:tidy:whitespace # Removes trailing whitespace from code files
60
60
  rake shipit # Checks that we're ready to push, and then pushes the current branch to origin
61
- rake toolchain:bootstrap[project_path] # Bootstraps iOS Toolchain configuration (project_path optional)
61
+ rake toolchain:bootstrap[project_root] # Bootstraps iOS Toolchain configuration (project_root optional)
62
62
  rake validate # Checks you if you need to do any cleanup of the code before you push
63
63
 
64
64
  ## Contributing
@@ -3,8 +3,12 @@ require 'bundler'
3
3
 
4
4
  module IosToolchain
5
5
  class Config
6
+ def project_root_path
7
+ Bundler.root.to_s
8
+ end
9
+
6
10
  def project_file_path
7
- config_yaml['project-file-path']
11
+ absolute_path(config_yaml['project-file-path'])
8
12
  end
9
13
 
10
14
  def default_sdk
@@ -36,11 +40,11 @@ module IosToolchain
36
40
  end
37
41
 
38
42
  def provisioning_path
39
- config_yaml['provisioning-path']
43
+ absolute_path(config_yaml['provisioning-path'])
40
44
  end
41
45
 
42
46
  def crashlytics_framework_path
43
- config_yaml['crashlytics-framework-path']
47
+ absolute_path(config_yaml['crashlytics-framework-path'])
44
48
  end
45
49
 
46
50
  def crashlytics_installed?
@@ -53,8 +57,12 @@ module IosToolchain
53
57
 
54
58
  private
55
59
 
60
+ def absolute_path(path)
61
+ (Pathname.new(project_root_path) + Pathname.new(path)).to_s unless path.nil?
62
+ end
63
+
56
64
  def config_file_path
57
- File.join(Bundler.root, file_name)
65
+ File.join(project_root_path, file_name)
58
66
  end
59
67
 
60
68
  def config_yaml
@@ -25,7 +25,7 @@ module IosToolchain
25
25
 
26
26
  def config
27
27
  {
28
- 'project-file-path' => analyzer.project_path,
28
+ 'project-file-path' => analyzer.project_file_path,
29
29
  'default-scheme' => analyzer.default_scheme,
30
30
  'default-sdk' => 'iphoneos10.2',
31
31
  'default-32bit-test-device' => "'iOS Simulator,OS=10.2,name=iPhone 5'",
@@ -33,7 +33,7 @@ module IosToolchain
33
33
  'app-targets' => analyzer.app_targets,
34
34
  'test-targets' => analyzer.test_targets,
35
35
  'ui-test-targets' => analyzer.ui_test_targets,
36
- 'provisioning-path' => "#{File.join(analyzer.project_root, 'provisioning')}",
36
+ 'provisioning-path' => './provisioning',
37
37
  'crashlytics-framework-path' => analyzer.crashlytics_framework_path
38
38
  }
39
39
  end
@@ -3,12 +3,15 @@ require 'pathname'
3
3
 
4
4
  module IosToolchain
5
5
  class ProjectAnalyzer
6
- attr_reader :project_root, :project_path
6
+ attr_reader :project_root, :project_file_path
7
7
 
8
8
  def initialize(project_root)
9
- @project_root = Pathname.new(project_root).realpath.to_s
10
- @project_path = find_project_path!
11
- @project = Xcodeproj::Project.open(@project_path)
9
+ project_root_path = Pathname.new(project_root).realpath
10
+ @project_root = project_root_path.to_s
11
+ @absolute_project_path = find_project_path!
12
+ @project_file_path = relative_from_root(@absolute_project_path)
13
+
14
+ @project = Xcodeproj::Project.open(@absolute_project_path)
12
15
  end
13
16
 
14
17
  def default_scheme
@@ -19,7 +22,8 @@ module IosToolchain
19
22
  end
20
23
 
21
24
  def crashlytics_framework_path
22
- Dir.glob("#{project_root}/**/Crashlytics.framework").first
25
+ path = glob_excluding_carthage('**/Crashlytics.framework').first || return
26
+ relative_from_root(path)
23
27
  end
24
28
 
25
29
  def app_targets
@@ -42,24 +46,34 @@ module IosToolchain
42
46
 
43
47
  private
44
48
 
49
+ def relative_from_root(path)
50
+ "./#{Pathname(path).relative_path_from(Pathname.new(project_root)).to_s}"
51
+ end
52
+
45
53
  def shared_schemes
46
- Xcodeproj::Project.schemes(project_path)
54
+ Xcodeproj::Project.schemes(project_file_path)
47
55
  end
48
56
 
49
57
  def project_name
50
- project_path.split(File::SEPARATOR)[-1].split('.')[-2]
58
+ project_file_path.split(File::SEPARATOR)[-1].split('.')[-2]
51
59
  end
52
60
 
53
61
  def find_project_path!
54
- Dir.glob(File.join(project_root, '/*.xcodeproj')).first.tap do |project|
62
+ glob_excluding_carthage('**/*.xcodeproj').first.tap do |project|
55
63
  return project unless project.nil?
56
64
 
57
65
  error_message = "No .xcodeproj file was found in #{project_root} "
58
- error_message += "Run `rake toolchain:bootstrap[/path/containing/project/]`"
66
+ error_message += 'Run `rake toolchain:bootstrap[/path/containing/project/]`'
59
67
  throw error_message
60
68
  end
61
69
  end
62
70
 
71
+ def glob_excluding_carthage(pattern)
72
+ Dir.glob(File.join(project_root, pattern)).reject do |name|
73
+ name =~ /\/Carthage\//
74
+ end
75
+ end
76
+
63
77
  attr_reader :project
64
78
  end
65
79
  end
@@ -6,11 +6,11 @@ include IosToolchain::Helpers
6
6
 
7
7
  desc 'iOS Toolchain maintenance tasks'
8
8
  namespace :toolchain do
9
- desc "Bootstraps iOS Toolchain configuration (project_path optional)"
10
- task :bootstrap, :project_path do |t, args|
11
- args.with_defaults(:project_path => Bundler.root)
9
+ desc 'Bootstraps iOS Toolchain configuration (project_root optional)'
10
+ task :bootstrap, :project_root do |t, args|
11
+ args.with_defaults(:project_root => Bundler.root)
12
12
 
13
- analyzer = IosToolchain::ProjectAnalyzer.new(args[:project_path])
13
+ analyzer = IosToolchain::ProjectAnalyzer.new(args[:project_root])
14
14
  bootstrapper = IosToolchain::ConfigBootstrapper.new(analyzer)
15
15
  bootstrapper.bootstrap!
16
16
 
@@ -1,18 +1,18 @@
1
1
  include IosToolchain::Helpers
2
2
 
3
3
  namespace :git do
4
- desc "Checks for uncommitted changes and aborts if any are found"
4
+ desc 'Checks for uncommitted changes and aborts if any are found'
5
5
  task :check_for_uncommitted_changes do
6
- puts "Checking for uncommitted changes..."
6
+ puts 'Checking for uncommitted changes...'
7
7
  if `git status -s`.chomp.length > 0
8
- system("git status")
9
- bail("Uncommitted changes detected (maybe something got auto-corrected?). Please commit these and try again.")
8
+ system('git status')
9
+ bail('Uncommitted changes detected (maybe something got auto-corrected?). Please commit these and try again.')
10
10
  end
11
- puts "Done!"
11
+ puts 'Done!'
12
12
  end
13
13
 
14
- desc "Pushes the current branch to origin"
14
+ desc 'Pushes the current branch to origin'
15
15
  task :push_origin do
16
- system("git push origin head") || bail
16
+ system('git push origin head') || bail
17
17
  end
18
18
  end
@@ -4,28 +4,28 @@ namespace :ios do
4
4
  desc 'Cleans the build & resets simulator'
5
5
  task :clean => [:'clean:build']
6
6
 
7
- desc "Cleans the build"
7
+ desc 'Cleans the build'
8
8
  namespace :clean do
9
9
  task :build do
10
- puts "Cleaning..."
10
+ puts 'Cleaning...'
11
11
 
12
12
  clean_cmd = []
13
13
  clean_cmd << 'xcodebuild clean'
14
14
  clean_cmd << 'rm -rf build'
15
15
  system(clean_cmd.join("\n"))
16
16
 
17
- puts "Done!"
17
+ puts 'Done!'
18
18
  end
19
19
 
20
20
  desc 'Resets the simulator'
21
21
  task :simulator do
22
- puts "Resetting simulator..."
22
+ puts 'Resetting simulator...'
23
23
 
24
24
  system("osascript -e 'tell application \"iOS Simulator\" to quit'") &&
25
25
  system("osascript -e 'tell application \"Simulator\" to quit'") &&
26
- system("xcrun simctl erase all")
26
+ system('xcrun simctl erase all')
27
27
 
28
- puts "Done!"
28
+ puts 'Done!'
29
29
  end
30
30
  end
31
31
  end
@@ -1,25 +1,25 @@
1
1
  namespace :ios do
2
2
  namespace :carthage do
3
- desc "updates our Carthage dependencies to the latest version"
3
+ desc 'updates our Carthage dependencies to the latest version'
4
4
  task :update do
5
5
  carthage_cmd = []
6
- carthage_cmd << "carthage"
7
- carthage_cmd << "update"
8
- carthage_cmd << "--platform ios"
9
- carthage_cmd << "--no-use-binaries"
10
- carthage_cmd = carthage_cmd.join(" ")
6
+ carthage_cmd << 'carthage'
7
+ carthage_cmd << 'update'
8
+ carthage_cmd << '--platform ios'
9
+ carthage_cmd << '--no-use-binaries'
10
+ carthage_cmd = carthage_cmd.join(' ')
11
11
 
12
12
  system(carthage_cmd)
13
13
  end
14
14
 
15
- desc "Fetches our Carthage dependencies to the locked in versions"
15
+ desc 'Fetches our Carthage dependencies to the locked in versions'
16
16
  task :fetch do
17
17
  carthage_cmd = []
18
- carthage_cmd << "carthage"
19
- carthage_cmd << "bootstrap"
20
- carthage_cmd << "--platform ios"
21
- carthage_cmd << "--no-use-binaries"
22
- carthage_cmd = carthage_cmd.join(" ")
18
+ carthage_cmd << 'carthage'
19
+ carthage_cmd << 'bootstrap'
20
+ carthage_cmd << '--platform ios'
21
+ carthage_cmd << '--no-use-binaries'
22
+ carthage_cmd = carthage_cmd.join(' ')
23
23
 
24
24
  system(carthage_cmd)
25
25
  end
@@ -1,5 +1,5 @@
1
1
  include IosToolchain::Helpers
2
- require "fileutils"
2
+ require 'fileutils'
3
3
 
4
4
  namespace :ios do
5
5
  desc 'helpers for dealing with provisiong'
@@ -11,7 +11,7 @@ def build_specs_cmd(scheme, options={})
11
11
  specs_cmd << "-destination platform=#{config.default_32bit_test_device}" unless options[:skip_32bit]
12
12
  specs_cmd << "-destination platform=#{config.default_64bit_test_device}"
13
13
  specs_cmd << '| bundle exec xcpretty'
14
- specs_cmd = specs_cmd.join(" ")
14
+ specs_cmd.join(' ')
15
15
  end
16
16
 
17
17
  def run_tests_or_bail(tests, args)
@@ -20,28 +20,28 @@ def run_tests_or_bail(tests, args)
20
20
  Rake::Task['ios:clean:build'].reenable
21
21
  Rake::Task['ios:clean:simulator'].reenable
22
22
  tests.each do |target|
23
- if(!system(build_specs_cmd(target, skip_32bit: args[:skip_32bit])))
24
- bail("Specs failure - please fix the failing specs and try again.")
23
+ unless system(build_specs_cmd(target, skip_32bit: args[:skip_32bit]))
24
+ bail('Specs failure - please fix the failing specs and try again.')
25
25
  end
26
26
  end
27
27
  end
28
28
 
29
29
  namespace :ios do
30
- desc "Run all the tests: unit and UI, 32bit and 64bit"
30
+ desc 'Run all the tests: unit and UI, 32bit and 64bit'
31
31
  task :specs => ['specs:unit', 'specs:ui']
32
32
 
33
33
  namespace :specs do
34
- desc "Run 64bit unit tests only"
34
+ desc 'Run 64bit unit tests only'
35
35
  task :slim do
36
36
  Rake::Task['specs:unit'].invoke(skip_32bit: true)
37
37
  end
38
38
 
39
- desc "Run the unit tests (optionally skip 32 bit devices)"
39
+ desc 'Run the unit tests (optionally skip 32 bit devices)'
40
40
  task :unit, [:skip_32bit] => ['ios:clean:build', 'ios:clean:simulator'] do |task, args|
41
41
  run_tests_or_bail(config.test_targets, args)
42
42
  end
43
43
 
44
- desc "Run the UI tests (optionally skip 32 bit devices)"
44
+ desc 'Run the UI tests (optionally skip 32 bit devices)'
45
45
  task :ui, [:skip_32bit] => ['ios:clean:build', 'ios:clean:simulator'] do |task, args|
46
46
  run_tests_or_bail(config.ui_test_targets, args)
47
47
  end
@@ -3,13 +3,13 @@ require 'ios_toolchain/helpers'
3
3
  include IosToolchain::Helpers
4
4
 
5
5
  namespace :ios do
6
- desc "Reports and attempts to tidy up common cleanliness problems with the codebase"
6
+ desc 'Reports and attempts to tidy up common cleanliness problems with the codebase'
7
7
  task :tidy => ['tidy:project_file', 'tidy:specs', 'tidy:whitespace', 'tidy:lint']
8
8
 
9
9
  namespace :tidy do
10
- desc "Unfocusses any focussed Quick specs"
10
+ desc 'Unfocusses any focussed Quick specs'
11
11
  task :specs do
12
- puts "Unfocussing specs..."
12
+ puts 'Unfocussing specs...'
13
13
 
14
14
  find_focussed_files_cmd = []
15
15
  find_focussed_files_cmd << 'grep -l -r -e'
@@ -26,39 +26,39 @@ namespace :ios do
26
26
  unfocus_cmd << "-e 's/fdescribe(/describe(/g;'"
27
27
  unfocus_cmd << "-e 's/fcontext(/context(/g;'"
28
28
  unfocus_cmd << "\"#{file_with_focussed_specs}\""
29
- unfocus_cmd = unfocus_cmd.join(" ")
29
+ unfocus_cmd = unfocus_cmd.join(' ')
30
30
  system(unfocus_cmd)
31
31
  end
32
32
 
33
- puts "Done!"
33
+ puts 'Done!'
34
34
  end
35
35
 
36
- desc "Sorts the project file"
36
+ desc 'Sorts the project file'
37
37
  task :project_file do
38
- puts "Sorting the project file..."
38
+ puts 'Sorting the project file...'
39
39
  system("script/sort-Xcode-project-file #{config.project_file_path}")
40
- puts "Done!"
40
+ puts 'Done!'
41
41
  end
42
42
 
43
- desc "Removes trailing whitespace from code files"
43
+ desc 'Removes trailing whitespace from code files'
44
44
  task :whitespace do
45
45
  file_extensions = %w{ h m swift }
46
46
  search_pattern = file_extensions.map { |ext| "-name \"*.#{ext}\""}.join(' -o ')
47
- puts "Removing trailing whitespace..."
48
- system("find #{config.app_targets.join(" ")} #{config.test_targets.join(" ")} #{search_pattern} -exec sed -i '' -e's/[ ]*$//' \"{}\" \\;")
49
- puts "Done!"
47
+ puts 'Removing trailing whitespace...'
48
+ system("find #{config.app_targets.join(' ')} #{config.test_targets.join(" ")} #{search_pattern} -exec sed -i '' -e's/[ ]*$//' \"{}\" \\;")
49
+ puts 'Done!'
50
50
  end
51
51
 
52
- desc "Runs swiftlint"
52
+ desc 'Runs swiftlint'
53
53
  task :lint do
54
- puts "Linting..."
55
- if !system("which swiftlint")
56
- bail("Swiftlint is not installed - please install via `brew install swiftlint`")
54
+ puts 'Linting...'
55
+ unless system('which swiftlint')
56
+ bail('Swiftlint is not installed - please install via `brew install swiftlint`')
57
57
  end
58
- if !system("swiftlint lint --strict")
59
- bail("Code hygeine problems were detected via swiftlint")
58
+ unless system('swiftlint lint --strict')
59
+ bail('Code hygeine problems were detected via swiftlint')
60
60
  end
61
- puts "Done!"
61
+ puts 'Done!'
62
62
  end
63
63
  end
64
64
  end
@@ -1,5 +1,5 @@
1
1
 
2
2
  desc "Checks that we're ready to push, and then pushes the current branch to origin"
3
3
  task :shipit => [:validate, "git:push_origin"] do
4
- puts "That ship has sailed! 😎"
4
+ puts 'That ship has sailed! 😎'
5
5
  end
@@ -1,5 +1,5 @@
1
1
 
2
- desc "Checks you if you need to do any cleanup of the code before you push"
2
+ desc 'Checks you if you need to do any cleanup of the code before you push'
3
3
  task :validate do
4
4
  Rake::Task['git:check_for_uncommitted_changes'].invoke
5
5
  Rake::Task['ios:clean:build'].invoke
@@ -1,3 +1,3 @@
1
1
  module IosToolchain
2
- VERSION = "0.2.2"
2
+ VERSION = '0.2.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ios_toolchain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Schmidt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2017-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler