motion-sparkle-sandbox 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +183 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +37 -0
  8. data/Gemfile +13 -3
  9. data/README.md +73 -71
  10. data/Rakefile +2 -7
  11. data/bin/bundle +103 -0
  12. data/bin/byebug +29 -0
  13. data/bin/coderay +29 -0
  14. data/bin/fuzzy_match +29 -0
  15. data/bin/htmldiff +29 -0
  16. data/bin/httpclient +29 -0
  17. data/bin/ldiff +29 -0
  18. data/bin/pod +29 -0
  19. data/bin/pry +29 -0
  20. data/bin/rake +29 -0
  21. data/bin/rspec +29 -0
  22. data/bin/rubocop +29 -0
  23. data/bin/ruby-parse +29 -0
  24. data/bin/ruby-rewrite +29 -0
  25. data/bin/sandbox-pod +29 -0
  26. data/bin/xcodeproj +29 -0
  27. data/lib/motion/project/appcast.rb +177 -104
  28. data/lib/motion/project/indent_string.rb +18 -0
  29. data/lib/motion/project/install.rb +22 -66
  30. data/lib/motion/project/package.rb +52 -36
  31. data/lib/motion/project/project.rb +41 -51
  32. data/lib/motion/project/rake_tasks.rb +28 -32
  33. data/lib/motion/project/setup.rb +67 -73
  34. data/lib/motion/project/sparkle.rb +244 -148
  35. data/lib/motion/project/templates.rb +24 -22
  36. data/lib/motion-sparkle-sandbox/version.rb +5 -0
  37. data/lib/motion-sparkle-sandbox.rb +19 -3
  38. data/motion-sparkle-sandbox.gemspec +26 -16
  39. data/sample-app/.gitignore +9 -0
  40. data/sample-app/Gemfile +8 -0
  41. data/sample-app/README.md +87 -0
  42. data/sample-app/Rakefile +44 -0
  43. data/sample-app/app/app_delegate.rb +15 -0
  44. data/sample-app/app/menu.rb +155 -0
  45. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/1024x1024.png +0 -0
  46. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  47. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_128x128.png +0 -0
  48. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_128x128@2x.png +0 -0
  49. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_16x16.png +0 -0
  50. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_16x16@2x.png +0 -0
  51. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_256x256.png +0 -0
  52. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_256x256@2x.png +0 -0
  53. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_32x32.png +0 -0
  54. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_32x32@2x.png +0 -0
  55. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_512x512.png +0 -0
  56. data/sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_512x512@2x.png +0 -0
  57. data/sample-app/resources/Assets.xcassets/Contents.json +6 -0
  58. data/sample-app/resources/Credits.rtf +29 -0
  59. data/sample-app/spec/main_spec.rb +11 -0
  60. data/spec/setup_spec.rb +67 -0
  61. data/spec/sparkle_spec.rb +113 -65
  62. data/spec/spec_helper.rb +94 -29
  63. data/spec/spec_utils.rb +32 -0
  64. data/vendor/.git_keep +0 -0
  65. metadata +78 -14
  66. data/vendor/README.md +0 -34
  67. data/vendor/Sparkle.zip +0 -0
  68. data/vendor/codesign_embedded_executable +0 -46
  69. data/vendor/generate_appcast +0 -0
data/spec/sparkle_spec.rb CHANGED
@@ -1,90 +1,138 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ # frozen_string_literal: true
2
2
 
3
- module Motion; module Project;
4
- class Config
5
- attr_writer :project_dir
6
- end
7
- end; end
3
+ require File.expand_path('spec_utils', __dir__)
8
4
 
9
- describe "motion-sparkle-sandbox" do
10
- extend SpecHelper::TemporaryDirectory
5
+ module Motion
6
+ module Project
7
+ class Config
8
+ attr_writer :project_dir
9
+ end
10
+ end
11
+ end
11
12
 
12
- before do
13
- unless @completed_setup
14
- teardown_temporary_directory
15
- setup_temporary_directory
13
+ # rubocop:disable Metrics/BlockLength
14
+ describe 'motion-sparkle-sandbox' do
15
+ before(:all) do
16
+ SpecUtils::TemporaryDirectory.teardown
17
+ SpecUtils::TemporaryDirectory.setup
16
18
 
17
- FileUtils.mkdir_p(temporary_directory + 'resources')
18
- FileUtils.mkdir_p(temporary_directory + 'vendor')
19
- FileUtils.touch(temporary_directory + '.gitignore')
19
+ FileUtils.mkdir_p("#{SpecUtils::TemporaryDirectory.directory}resources")
20
+ FileUtils.mkdir_p("#{SpecUtils::TemporaryDirectory.directory}vendor")
21
+ FileUtils.touch("#{SpecUtils::TemporaryDirectory.directory}.gitignore")
22
+ end
20
23
 
24
+ context 'configuration' do
25
+ before do
21
26
  @config = App.config
22
- @config.project_dir = temporary_directory.to_s
27
+ @config.sparkle = nil
28
+ @config.project_dir = SpecUtils::TemporaryDirectory.directory.to_s
23
29
  @config.instance_eval do
24
30
  sparkle do
25
- release :base_url, 'http://example.com'
26
- release :public_key, 'public_key.pem'
27
- release :version, '1.0'
28
- # Optional config options
29
- release :feed_base_url, 'http://rss.example.com'
30
- release :feed_filename, 'example.xml'
31
- release :notes_base_url, 'http://www.example.com'
32
- release :notes_filename, 'example.html'
33
- release :package_base_url, 'http://download.example.com'
34
- release :package_filename, 'example.zip'
31
+ release :base_url, 'http://example.com/'
35
32
  end
36
33
  end
37
- Rake::Task['sparkle:setup'].invoke
38
- Rake::Task['sparkle:setup_certificates'].invoke
39
- @completed_setup = true
40
34
  end
41
- end
42
35
 
43
- it "Sparkle's release base url should be set correctly" do
44
- @config.sparkle.appcast.base_url.should.equal 'http://example.com'
45
- end
36
+ describe 'base url' do
37
+ it 'base url should be set correctly' do
38
+ expect(@config.sparkle.appcast.base_url).to eq 'http://example.com/'
39
+ end
40
+ end
46
41
 
47
- it "Sparkle's feed url should be set correctly" do
48
- @config.info_plist['SUFeedURL'].should.equal 'http://rss.example.com/example.xml'
49
- end
42
+ describe 'feed url' do
43
+ it 'uses default value' do
44
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://example.com/releases.xml'
45
+ end
50
46
 
51
- it "Sparkle's release notes url should be set correctly" do
52
- @config.sparkle.appcast.notes_url.should.equal 'http://www.example.com/example.html'
53
- end
47
+ it 'uses feed_base_url' do
48
+ @config.sparkle.publish(:feed_base_url, 'http://rss.example.com/')
54
49
 
55
- it "Sparkle's appcast package url should be set correctly" do
56
- @config.sparkle.appcast.package_url.should.equal 'http://download.example.com/example.zip'
57
- end
50
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://rss.example.com/releases.xml'
51
+ end
58
52
 
59
- it "Sparkle's public key should have custom name" do
60
- @config.info_plist['SUPublicDSAKeyFile'].should.equal 'public_key.pem'
61
- end
53
+ it 'uses feed_filename' do
54
+ @config.sparkle.publish(:feed_base_url, 'http://rss.example.com/')
55
+ @config.sparkle.publish(:feed_filename, 'example.xml')
62
56
 
63
- it "Version and short version should be set correctly" do
64
- @config.version.should.equal '1.0'
65
- @config.short_version.should.equal '1.0'
66
- end
57
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://rss.example.com/example.xml'
58
+ end
59
+ end
67
60
 
68
- it "Version should be same for short_version and version" do
69
- @config.version.should.equal @config.short_version
70
- end
61
+ describe 'appcast package base url' do
62
+ it 'uses default value' do
63
+ expect(@config.sparkle.appcast.package_base_url).to eq 'http://example.com/'
64
+ end
71
65
 
72
- it "Sparkle framework should be embedded" do
73
- sparkle_framework_path = ROOT + "tmp/vendor/Sparkle/Sparkle.framework"
74
- @config.embedded_frameworks.include?(sparkle_framework_path).should.equal true
75
- end
66
+ it 'uses package_base_url' do
67
+ @config.sparkle.publish(:package_base_url, 'http://download.example.com/')
76
68
 
77
- it "should create private certificate" do
78
- File.exist?(@config.sparkle.private_key_path.to_s).should.equal true
79
- end
69
+ expect(@config.sparkle.appcast.package_base_url).to eq 'http://download.example.com/'
70
+ end
71
+ end
80
72
 
81
- it "should create public certificate" do
82
- File.exist?(@config.sparkle.public_key_path.to_s).should.equal true
83
- end
73
+ describe 'appcast package filename' do
74
+ it 'has no default value' do
75
+ expect(@config.sparkle.appcast.package_filename).to be_nil
76
+ end
77
+
78
+ it 'uses package_filename' do
79
+ @config.sparkle.publish(:package_filename, 'example.zip')
84
80
 
85
- it "should add files to gitignore" do
86
- a = `cat .gitignore`
87
- a.strip.should.not.equal ''
81
+ expect(@config.sparkle.appcast.package_filename).to eq 'example.zip'
82
+ end
83
+ end
84
+
85
+ describe 'appcast releases notes base url' do
86
+ it 'uses default value' do
87
+ expect(@config.sparkle.appcast.notes_base_url).to eq 'http://example.com/'
88
+ end
89
+
90
+ it 'uses notes_base_url' do
91
+ @config.sparkle.publish(:notes_base_url, 'http://download.example.com/')
92
+
93
+ expect(@config.sparkle.appcast.notes_base_url).to eq 'http://download.example.com/'
94
+ end
95
+ end
96
+
97
+ describe 'appcast release notes filename' do
98
+ it 'has no default value' do
99
+ expect(@config.sparkle.appcast.notes_filename).to be_nil
100
+ end
101
+
102
+ it 'uses package_filename' do
103
+ @config.sparkle.publish(:notes_filename, 'release_notes.html')
104
+
105
+ expect(@config.sparkle.appcast.notes_filename).to eq 'release_notes.html'
106
+ end
107
+ end
108
+
109
+ it 'version and short version should be set correctly' do
110
+ @config.sparkle.publish(:version, '1.0')
111
+
112
+ expect(@config.version).to eq '1.0'
113
+ expect(@config.short_version).to eq '1.0'
114
+ end
88
115
  end
89
116
 
117
+ context 'cocoapod' do
118
+ before do
119
+ @config = App.config
120
+ @config.project_dir = SpecUtils::TemporaryDirectory.directory.to_s
121
+ @config.instance_eval do
122
+ pods do
123
+ pod 'Sparkle', POD_VERSION
124
+ end
125
+ end
126
+
127
+ Rake::Task['pod:install'].invoke
128
+ end
129
+
130
+ it 'Sparkle framework pod should be embedded' do
131
+ sparkle_framework_path = 'vendor/Pods/Sparkle/Sparkle.framework'
132
+ @config.pods.pods_libraries
133
+
134
+ expect(@config.embedded_frameworks.first.end_with?(sparkle_framework_path)).to be_truthy
135
+ end
136
+ end
90
137
  end
138
+ # rubocop:enable Metrics/BlockLength
data/spec/spec_helper.rb CHANGED
@@ -1,35 +1,100 @@
1
- require 'pathname'
2
- require 'fileutils'
3
- require 'rake'
4
- require 'rubygems'
5
- require 'bundler/setup'
6
- require 'bacon'
1
+ # frozen_string_literal: true
7
2
 
8
- ROOT = Pathname.new(File.expand_path('../../', __FILE__))
9
- $:.unshift(ENV['RUBYMOTION_CHECKOUT'] || "/Library/RubyMotion/lib")
10
- $:.unshift((ROOT + 'lib').to_s)
11
- require 'motion/project/template/osx'
12
- require 'motion-sparkle-sandbox'
13
-
14
- Bacon.summary_at_exit
15
-
16
- module SpecHelper
17
- def self.temporary_directory
18
- TemporaryDirectory.temporary_directory
3
+ # This file was generated by the `rspec --init` command. Conventionally, all
4
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
5
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
6
+ # this file to always be loaded, without a need to explicitly require it in any
7
+ # files.
8
+ #
9
+ # Given that it is always loaded, you are encouraged to keep this file as
10
+ # light-weight as possible. Requiring heavyweight dependencies from this file
11
+ # will add to the boot time of your test suite on EVERY test run, even for an
12
+ # individual file that may not need all of that loaded. Instead, consider making
13
+ # a separate helper file that requires the additional dependencies and performs
14
+ # the additional setup, and require it from the spec files that actually need
15
+ # it.
16
+ #
17
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
18
+ RSpec.configure do |config|
19
+ # rspec-expectations config goes here. You can use an alternate
20
+ # assertion/expectation library such as wrong or the stdlib/minitest
21
+ # assertions if you prefer.
22
+ config.expect_with :rspec do |expectations|
23
+ # This option will default to `true` in RSpec 4. It makes the `description`
24
+ # and `failure_message` of custom matchers include text for helper methods
25
+ # defined using `chain`, e.g.:
26
+ # be_bigger_than(2).and_smaller_than(4).description
27
+ # # => "be bigger than 2 and smaller than 4"
28
+ # ...rather than:
29
+ # # => "be bigger than 2"
30
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
19
31
  end
20
32
 
21
- module TemporaryDirectory
22
- def temporary_directory
23
- ROOT + 'tmp'
24
- end
25
- module_function :temporary_directory
33
+ # rspec-mocks config goes here. You can use an alternate test double
34
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
35
+ config.mock_with :rspec do |mocks|
36
+ # Prevents you from mocking or stubbing a method that does not exist on
37
+ # a real object. This is generally recommended, and will default to
38
+ # `true` in RSpec 4.
39
+ mocks.verify_partial_doubles = true
40
+ end
26
41
 
27
- def setup_temporary_directory
28
- temporary_directory.mkpath
29
- end
42
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
43
+ # have no way to turn it off -- the option exists only for backwards
44
+ # compatibility in RSpec 3). It causes shared context metadata to be
45
+ # inherited by the metadata hash of host groups and examples, rather than
46
+ # triggering implicit auto-inclusion in groups with matching metadata.
47
+ config.shared_context_metadata_behavior = :apply_to_host_groups
30
48
 
31
- def teardown_temporary_directory
32
- temporary_directory.rmtree if temporary_directory.exist?
33
- end
34
- end
49
+ # The settings below are suggested to provide a good initial experience
50
+ # with RSpec, but feel free to customize to your heart's content.
51
+ # # This allows you to limit a spec run to individual examples or groups
52
+ # # you care about by tagging them with `:focus` metadata. When nothing
53
+ # # is tagged with `:focus`, all examples get run. RSpec also provides
54
+ # # aliases for `it`, `describe`, and `context` that include `:focus`
55
+ # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
56
+ # config.filter_run_when_matching :focus
57
+ #
58
+ # # Allows RSpec to persist some state between runs in order to support
59
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
60
+ # # you configure your source control system to ignore this file.
61
+ # config.example_status_persistence_file_path = "spec/examples.txt"
62
+ #
63
+ # # Limits the available syntax to the non-monkey patched syntax that is
64
+ # # recommended. For more details, see:
65
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
66
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
67
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
68
+ # config.disable_monkey_patching!
69
+ #
70
+ # # This setting enables warnings. It's recommended, but in some cases may
71
+ # # be too noisy due to issues in dependencies.
72
+ # config.warnings = true
73
+ #
74
+ # # Many RSpec users commonly either run the entire suite or an individual
75
+ # # file, and it's useful to allow more verbose output when running an
76
+ # # individual spec file.
77
+ # if config.files_to_run.one?
78
+ # # Use the documentation formatter for detailed output,
79
+ # # unless a formatter has already been configured
80
+ # # (e.g. via a command-line flag).
81
+ # config.default_formatter = "doc"
82
+ # end
83
+ #
84
+ # # Print the 10 slowest examples and example groups at the
85
+ # # end of the spec run, to help surface which specs are running
86
+ # # particularly slow.
87
+ # config.profile_examples = 10
88
+ #
89
+ # # Run specs in random order to surface order dependencies. If you find an
90
+ # # order dependency and want to debug it, you can fix the order by providing
91
+ # # the seed, which is printed after each run.
92
+ # # --seed 1234
93
+ # config.order = :random
94
+ #
95
+ # # Seed global randomization in this process using the `--seed` CLI option.
96
+ # # Setting this allows you to use `--seed` to deterministically reproduce
97
+ # # test failures related to randomization by passing the same `--seed` value
98
+ # # as the one that triggered the failure.
99
+ # Kernel.srand config.seed
35
100
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake'
4
+ require 'pry'
5
+
6
+ ROOT = Pathname.new(File.expand_path('..', __dir__))
7
+ $:.unshift(ENV['RUBYMOTION_CHECKOUT'] || '/Library/RubyMotion/lib')
8
+ $:.unshift("#{ROOT}lib".to_s)
9
+
10
+ # need to ensure that we bypass the `app.pods` in `lib/motion-sparkle-sandbox.rb`
11
+ @running_specs = 1
12
+
13
+ require 'motion/project/template/osx'
14
+ require 'motion-sparkle-sandbox'
15
+
16
+ module SpecUtils
17
+ module TemporaryDirectory
18
+ TEMPORARY_DIRECTORY = ROOT + 'tmp' # rubocop:disable Style/StringConcatenation
19
+
20
+ def self.directory
21
+ TEMPORARY_DIRECTORY
22
+ end
23
+
24
+ def self.setup
25
+ directory.mkpath
26
+ end
27
+
28
+ def self.teardown
29
+ directory.rmtree if directory.exist?
30
+ end
31
+ end
32
+ end
data/vendor/.git_keep ADDED
File without changes
metadata CHANGED
@@ -1,31 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-sparkle-sandbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Walker
8
- autorequire:
8
+ - Alexandre L. Solleiro
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-08-30 00:00:00.000000000 Z
12
- dependencies: []
12
+ date: 2022-05-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: motion-cocoapods
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
13
28
  description: motion-sparkle-sandbox makes it easy to use the sandboxed version of
14
- Sparkle in your RubyMotion OS X apps
15
- email: github@digitalmoksha.com
29
+ Sparkle in your RubyMotion macOS apps
30
+ email:
31
+ - github@digitalmoksha.com
32
+ - alex@webcracy.org
16
33
  executables: []
17
34
  extensions: []
18
35
  extra_rdoc_files: []
19
36
  files:
20
37
  - ".gitignore"
38
+ - ".rspec"
39
+ - ".rubocop.yml"
40
+ - ".rubocop_todo.yml"
41
+ - ".ruby-version"
42
+ - ".travis.yml"
21
43
  - Gemfile
22
44
  - LICENSE
23
45
  - README.md
24
46
  - Rakefile
47
+ - bin/bundle
48
+ - bin/byebug
49
+ - bin/coderay
50
+ - bin/fuzzy_match
51
+ - bin/htmldiff
52
+ - bin/httpclient
53
+ - bin/ldiff
54
+ - bin/pod
55
+ - bin/pry
56
+ - bin/rake
57
+ - bin/rspec
58
+ - bin/rubocop
59
+ - bin/ruby-parse
60
+ - bin/ruby-rewrite
61
+ - bin/sandbox-pod
62
+ - bin/xcodeproj
25
63
  - lib/motion-sparkle-sandbox.rb
64
+ - lib/motion-sparkle-sandbox/version.rb
26
65
  - lib/motion/project/appcast.rb
27
66
  - lib/motion/project/appcast/release_notes.content.html
28
67
  - lib/motion/project/appcast/release_notes.template.erb
68
+ - lib/motion/project/indent_string.rb
29
69
  - lib/motion/project/install.rb
30
70
  - lib/motion/project/package.rb
31
71
  - lib/motion/project/project.rb
@@ -34,17 +74,37 @@ files:
34
74
  - lib/motion/project/sparkle.rb
35
75
  - lib/motion/project/templates.rb
36
76
  - motion-sparkle-sandbox.gemspec
77
+ - sample-app/.gitignore
78
+ - sample-app/Gemfile
79
+ - sample-app/README.md
80
+ - sample-app/Rakefile
81
+ - sample-app/app/app_delegate.rb
82
+ - sample-app/app/menu.rb
83
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/1024x1024.png
84
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Contents.json
85
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_128x128.png
86
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_128x128@2x.png
87
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_16x16.png
88
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_16x16@2x.png
89
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_256x256.png
90
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_256x256@2x.png
91
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_32x32.png
92
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_32x32@2x.png
93
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_512x512.png
94
+ - sample-app/resources/Assets.xcassets/AppIcon.appiconset/Icon_512x512@2x.png
95
+ - sample-app/resources/Assets.xcassets/Contents.json
96
+ - sample-app/resources/Credits.rtf
97
+ - sample-app/spec/main_spec.rb
98
+ - spec/setup_spec.rb
37
99
  - spec/sparkle_spec.rb
38
100
  - spec/spec_helper.rb
39
- - vendor/README.md
40
- - vendor/Sparkle.zip
41
- - vendor/codesign_embedded_executable
42
- - vendor/generate_appcast
101
+ - spec/spec_utils.rb
102
+ - vendor/.git_keep
43
103
  homepage: https://github.com/digitalmoksha/motion-sparkle-sandbox
44
104
  licenses:
45
105
  - MIT
46
106
  metadata: {}
47
- post_install_message:
107
+ post_install_message:
48
108
  rdoc_options: []
49
109
  require_paths:
50
110
  - lib
@@ -59,8 +119,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
119
  - !ruby/object:Gem::Version
60
120
  version: '0'
61
121
  requirements: []
62
- rubygems_version: 3.0.6
63
- signing_key:
122
+ rubygems_version: 3.1.4
123
+ signing_key:
64
124
  specification_version: 4
65
125
  summary: Sparkle (sandboxed) integration for Rubymotion projects
66
- test_files: []
126
+ test_files:
127
+ - spec/spec_helper.rb
128
+ - spec/sparkle_spec.rb
129
+ - spec/setup_spec.rb
130
+ - spec/spec_utils.rb
data/vendor/README.md DELETED
@@ -1,34 +0,0 @@
1
- ## Building the Sparkle.zip
2
-
3
- The `vendor` directory should contain
4
-
5
- ```
6
- vendor
7
- codesign_embedded_executable
8
- generate_appcast
9
- README.md
10
- Sparkle.zip
11
- ```
12
-
13
- The structure of `Sparkle.zip` is:
14
-
15
- ```
16
- Sparkle
17
- Sparkle.framework
18
- XPCServices
19
- org.sparkle-project.Downloader.xpc (not usually needed)
20
- org.sparkle-project.InstallerConnection.xpc
21
- org.sparkle-project.InstallerLauncher.xpc
22
- org.sparkle-project.InstallerStatus.xpc
23
- ```
24
-
25
- In order to get xpc services to be signed and work properly, they need to be copied into an `XPCServices` folder in `MyApp.app/Contents`
26
-
27
- The `codesign_embedded_executable` can properly sign these files once they have been copied into place.
28
-
29
- 1. Fetch the `2.x` branch
30
- 2. Copy the `bin/codesign_embedded_executable` into the `vendor` folder
31
- 3. Run `make release` and change to the output folder
32
- 4. Copy the `Sparkle.framework` into the `Sparkle` folder
33
- 5. Copy each of the above xpc files into the `XPCServices` folder
34
- 6. compress the `Sparkle` folder
data/vendor/Sparkle.zip DELETED
Binary file
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env python
2
-
3
- import os, sys, subprocess
4
-
5
- def log_message(message):
6
- sys.stderr.write(message + "\n")
7
-
8
- #Surround a token with double quotes if it has a space in it
9
- def sanitize(argument):
10
- return ('"' + argument + '"' if ' ' in argument else argument)
11
-
12
- def _codesign_service(identity, path, entitlements_path=None):
13
- command = ["codesign", "-o", "runtime", "-fs", identity, path] + ([] if entitlements_path is None else ["--entitlements", entitlements_path])
14
- log_message(" ".join(map(sanitize, command)))
15
-
16
- process = subprocess.Popen(command, stdout=subprocess.PIPE)
17
- process.communicate()
18
- if process.returncode != 0:
19
- log_message("Error: Failed to codesign %s" % (path))
20
- sys.exit(1)
21
-
22
- def codesign_service(service_name, identity, path, entitlements_path=None):
23
- #Sign the auxiliary executables (if any)
24
- executables_path = os.path.join(path, "Contents/MacOS/")
25
- if os.path.exists(executables_path):
26
- for executable in os.listdir(executables_path):
27
- if executable != service_name:
28
- _codesign_service(identity, os.path.join(executables_path, executable), entitlements_path)
29
-
30
- #Sign the service bundle
31
- _codesign_service(identity, path, entitlements_path)
32
-
33
- if __name__ == "__main__":
34
- if len(sys.argv) < 3:
35
- log_message("Usage:\n\t%s code-signing-identity executable1 executable1 ..." % (sys.argv[0]))
36
- log_message("Example:\n\t%s \"Developer ID Application\" ./XPCServices/*.xpc" % (sys.argv[0]))
37
- sys.exit(1)
38
-
39
- signing_identity = sys.argv[1]
40
- executables = sys.argv[2:]
41
-
42
- for executable in executables:
43
- parent, child = os.path.split(executable)
44
- service_name = os.path.splitext(child)[0]
45
- entitlements_path = os.path.join(parent, service_name + ".entitlements")
46
- codesign_service(service_name, signing_identity, executable, None if not os.path.exists(entitlements_path) else entitlements_path)
Binary file