danger-spm_version_updates 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -9,6 +9,7 @@ RSpec::Core::RakeTask.new(:specs)
9
9
 
10
10
  task default: :specs
11
11
 
12
+ desc "Run all test and lint tasks"
12
13
  task :spec do
13
14
  Rake::Task["specs"].invoke
14
15
  Rake::Task["rubocop"].invoke
@@ -19,6 +20,7 @@ desc "Run RuboCop on the lib/specs directory"
19
20
  RuboCop::RakeTask.new(:rubocop) { |task|
20
21
  task.requires << "rubocop-rspec"
21
22
  task.requires << "rubocop-rake"
23
+ task.requires << "rubocop-performance"
22
24
  task.patterns = ["lib/**/*.rb", "spec/**/*.rb"]
23
25
  }
24
26
 
@@ -13,34 +13,38 @@ Gem::Specification.new do |spec|
13
13
  spec.summary = "A Danger plugin to detect if there are any updates to your Swift Package Manager dependencies."
14
14
  spec.homepage = "https://github.com/hbmartin/danger-spm_version_updates"
15
15
  spec.license = "MIT"
16
- spec.required_ruby_version = ">= 2.7"
16
+ spec.required_ruby_version = ">= 3.0"
17
17
 
18
18
  spec.files = `git ls-files`.split($/)
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
20
  spec.require_paths = ["lib"]
21
+ spec.metadata["rubygems_mfa_required"] = "true"
22
22
 
23
23
  spec.add_runtime_dependency("danger-plugin-api", "~> 1.0")
24
24
  spec.add_runtime_dependency("semantic", "~> 1.6")
25
- spec.add_runtime_dependency("xcodeproj", "~> 1.23")
25
+ spec.add_runtime_dependency("xcodeproj", "~> 1.24")
26
26
 
27
27
  # General ruby development
28
28
  spec.add_development_dependency("bundler", "~> 2.0")
29
29
  spec.add_development_dependency("rake", "~> 13.0")
30
30
 
31
31
  # Testing support
32
- spec.add_development_dependency("rspec", "~> 3.4")
32
+ spec.add_development_dependency("rspec", "~> 3.9")
33
+ spec.add_development_dependency("simplecov", "~> 0.22")
34
+ spec.add_development_dependency("simplecov-cobertura", "~> 2.1")
33
35
 
34
36
  # Linting code and docs
35
37
  spec.add_development_dependency("reek")
36
- spec.add_development_dependency("rubocop")
38
+ spec.add_development_dependency("rubocop", "~> 1.62")
39
+ spec.add_development_dependency("rubocop-performance")
37
40
  spec.add_development_dependency("rubocop-rake")
38
41
  spec.add_development_dependency("rubocop-rspec")
39
- spec.add_development_dependency("yard")
42
+ spec.add_development_dependency("yard", "~> 0.9.36")
40
43
 
41
44
  # Makes testing easy via `bundle exec guard`
42
- spec.add_development_dependency("guard", "~> 2.14")
45
+ spec.add_development_dependency("guard", "~> 2.16")
43
46
  spec.add_development_dependency("guard-rspec", "~> 4.7")
47
+ spec.add_development_dependency("guard-rubocop", "~> 1.2")
44
48
 
45
49
  # If you want to work on older builds of ruby
46
50
  spec.add_development_dependency("listen", "3.0.7")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpmVersionUpdates
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -35,16 +35,8 @@ module Danger
35
35
  # The path to your Xcode project
36
36
  # @return [void]
37
37
  def check_for_updates(xcodeproj_path)
38
- raise(XcodeprojPathMustBeSet) if xcodeproj_path.nil?
39
-
40
- project = Xcodeproj::Project.open(xcodeproj_path)
41
- remote_packages = filter_remote_packages(project)
42
-
43
- resolved_path = find_packages_resolved(xcodeproj_path)
44
- raise(CouldNotFindResolvedFile) unless File.exist?(resolved_path)
45
-
46
- resolved_versions = JSON.load_file!(resolved_path)["pins"]
47
- .to_h { |pin| [pin["location"], pin["state"]["version"] || pin["state"]["revision"]] }
38
+ remote_packages = get_remote_package(xcodeproj_path)
39
+ resolved_versions = get_resolved_versions(xcodeproj_path)
48
40
 
49
41
  remote_packages.each { |repository_url, requirement|
50
42
  next if ignore_repos&.include?(repository_url)
@@ -55,9 +47,10 @@ module Danger
55
47
 
56
48
  # kind can be major, minor, range, exact, branch, or commit
57
49
 
58
- if kind == "branch" && check_when_exact
59
- last_commit = git_branch_last_commit(repository_url, requirement["branch"])
60
- warn("Newer commit available for #{name}: #{last_commit}") unless last_commit == resolved_version
50
+ if kind == "branch"
51
+ branch = requirement["branch"]
52
+ last_commit = git_branch_last_commit(repository_url, branch)
53
+ warn("Newer commit available for #{name} (#{branch}): #{last_commit}") unless last_commit == resolved_version
61
54
  next
62
55
  end
63
56
 
@@ -70,12 +63,34 @@ module Danger
70
63
  warn_for_new_versions(:major, available_versions, name, resolved_version)
71
64
  elsif kind == "upToNextMinorVersion"
72
65
  warn_for_new_versions(:minor, available_versions, name, resolved_version)
73
- elsif kind == "range"
66
+ elsif kind == "versionRange"
74
67
  warn_for_new_versions_range(available_versions, name, requirement, resolved_version)
75
68
  end
76
69
  }
77
70
  end
78
71
 
72
+ # Extracts remote packages from an Xcode project
73
+ # @param [String] xcodeproj_path
74
+ # The path to your Xcode project
75
+ # @return [Hash<String, Hash>]
76
+ def get_remote_package(xcodeproj_path)
77
+ raise(XcodeprojPathMustBeSet) if xcodeproj_path.nil?
78
+
79
+ filter_remote_packages(Xcodeproj::Project.open(xcodeproj_path))
80
+ end
81
+
82
+ # Extracts resolved versions from Package.resolved relative to an Xcode project
83
+ # @param [String] xcodeproj_path
84
+ # The path to your Xcode project
85
+ # @return [Hash<String, String>]
86
+ def get_resolved_versions(xcodeproj_path)
87
+ resolved_path = find_packages_resolved_file(xcodeproj_path)
88
+ raise(CouldNotFindResolvedFile) unless File.exist?(resolved_path)
89
+
90
+ JSON.load_file!(resolved_path)["pins"]
91
+ .to_h { |pin| [pin["location"], pin["state"]["version"] || pin["state"]["revision"]] }
92
+ end
93
+
79
94
  # Extract a readable name for the repo given the url, generally org/repo
80
95
  # @return [String]
81
96
  def repo_name(repo_url)
@@ -100,7 +115,7 @@ module Danger
100
115
 
101
116
  # Find the Packages.resolved file
102
117
  # @return [String]
103
- def find_packages_resolved(xcodeproj_path)
118
+ def find_packages_resolved_file(xcodeproj_path)
104
119
  if Dir.exist?(xcodeproj_path.sub("xcodeproj", "xcworkspace"))
105
120
  File.join(xcodeproj_path.sub("xcodeproj", "xcworkspace"), "xcshareddata", "swiftpm", "Package.resolved")
106
121
  else
@@ -129,7 +144,7 @@ Newer version of #{name}: #{newest_version} (but this package is set to exact ve
129
144
  newest_meeting_reqs = available_versions.find { |version|
130
145
  version < max_version && (report_pre_releases ? true : version.pre.nil?)
131
146
  }
132
- warn("Newer version of #{name}: #{newest_meeting_reqs} ") unless newest_meeting_reqs.to_s == resolved_version
147
+ warn("Newer version of #{name}: #{newest_meeting_reqs}") unless newest_meeting_reqs.to_s == resolved_version
133
148
  warn(
134
149
  <<-TEXT
135
150
  Newest version of #{name}: #{available_versions.first} (but this package is configured up to the next #{max_version} version)
@@ -160,7 +175,7 @@ Newest version of #{name}: #{available_versions.first} (but this package is conf
160
175
  # Remove git call to list tags
161
176
  # @return [Array<Semantic::Version>]
162
177
  def git_versions(repo_url)
163
- `git ls-remote -t #{repo_url}`
178
+ versions = `git ls-remote -t #{repo_url}`
164
179
  .split("\n")
165
180
  .map { |line| line.split("/tags/").last }
166
181
  .filter_map { |line|
@@ -170,8 +185,9 @@ Newest version of #{name}: #{available_versions.first} (but this package is conf
170
185
  nil
171
186
  end
172
187
  }
173
- .sort
174
- .reverse
188
+ versions.sort!
189
+ versions.reverse!
190
+ versions
175
191
  end
176
192
 
177
193
  def git_branch_last_commit(repo_url, branch_name)
data/spec/spec_helper.rb CHANGED
@@ -11,12 +11,6 @@ require "pry"
11
11
  require "danger"
12
12
  require "rspec"
13
13
 
14
- if `git remote -v` == ""
15
- puts "You cannot run tests without setting a local git remote on this repo"
16
- puts "It's a weird side-effect of Danger's internals."
17
- exit(0)
18
- end
19
-
20
14
  # Use coloured output, it's the best.
21
15
  RSpec.configure do |config|
22
16
  config.filter_gems_from_backtrace("bundler")
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "simplecov"
4
+ SimpleCov.start
5
+
6
+ require "simplecov-cobertura"
7
+ SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
8
+
3
9
  require File.expand_path("spec_helper", __dir__)
4
10
 
5
11
  module Danger
@@ -139,6 +145,36 @@ module Danger
139
145
 
140
146
  expect(@dangerfile.status_report[:warnings]).to eq(["Newest version of kean/Nuke: 13.0.0 (but this package is configured up to the next major version)\n"])
141
147
  end
148
+
149
+ it "Does report new versions for ranges" do
150
+ allow(@my_plugin).to receive(:git_versions)
151
+ .and_return [
152
+ Semantic::Version.new("13.0.0"),
153
+ Semantic::Version.new("12.1.6"),
154
+ Semantic::Version.new("12.1.7"),
155
+ ].sort.reverse
156
+
157
+ @my_plugin.check_for_updates("#{File.dirname(__FILE__)}/support/fixtures/VersionRange.xcodeproj")
158
+
159
+ expect(@dangerfile.status_report[:warnings]).to eq(
160
+ [
161
+ "Newer version of kean/Nuke: 12.1.7",
162
+ ]
163
+ )
164
+ end
165
+
166
+ it "Does report new versions for branches" do
167
+ allow(@my_plugin).to receive(:git_branch_last_commit)
168
+ .and_return "d658f302f56abfd7a163e3b5f44de39b780a64c2"
169
+
170
+ @my_plugin.check_for_updates("#{File.dirname(__FILE__)}/support/fixtures/Branch.xcodeproj")
171
+
172
+ expect(@dangerfile.status_report[:warnings]).to eq(
173
+ [
174
+ "Newer commit available for kean/Nuke (main): d658f302f56abfd7a163e3b5f44de39b780a64c2",
175
+ ]
176
+ )
177
+ end
142
178
  end
143
179
  end
144
180
  end
@@ -0,0 +1,80 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 54;
7
+ objects = {
8
+ /* Begin PBXGroup section */
9
+ F1465EF423AA94BF0055F7C3 = {
10
+ isa = PBXGroup;
11
+ children = (
12
+ F1465EFF23AA94BF0055F7C3 /* Demo */,
13
+ );
14
+ sourceTree = "<group>";
15
+ };
16
+ F1465EFF23AA94BF0055F7C3 /* Demo */ = {
17
+ isa = PBXGroup;
18
+ children = ();
19
+ path = Demo;
20
+ sourceTree = "<group>";
21
+ };
22
+ /* End PBXGroup section */
23
+
24
+ /* Begin PBXProject section */
25
+ F1465EF523AA94BF0055F7C3 /* Project object */ = {
26
+ isa = PBXProject;
27
+ attributes = {
28
+ BuildIndependentTargetsInParallel = YES;
29
+ LastSwiftUpdateCheck = 1420;
30
+ LastUpgradeCheck = 1420;
31
+ TargetAttributes = {
32
+ F1465EFC23AA94BF0055F7C3 = {
33
+ CreatedOnToolsVersion = 11.2.1;
34
+ };
35
+ };
36
+ };
37
+ buildConfigurationList = F1465EF823AA94BF0055F7C3 /* Build configuration list for PBXProject "Demo" */;
38
+ compatibilityVersion = "Xcode 9.3";
39
+ developmentRegion = en;
40
+ hasScannedForEncodings = 0;
41
+ knownRegions = (
42
+ en,
43
+ Base,
44
+ es,
45
+ "zh-Hans",
46
+ fr,
47
+ );
48
+ mainGroup = F1465EF423AA94BF0055F7C3;
49
+ packageReferences = (
50
+ 11BBD37629C1571400F7A968 /* XCRemoteSwiftPackageReference "Nuke" */,
51
+ );
52
+ productRefGroup = F1465EFE23AA94BF0055F7C3 /* Products */;
53
+ projectDirPath = "";
54
+ projectRoot = "";
55
+ targets = ();
56
+ };
57
+ /* End PBXProject section */
58
+
59
+ /* Begin XCConfigurationList section */
60
+ F1465EF823AA94BF0055F7C3 /* Build configuration list for PBXNativeTarget "Demo" */ = {
61
+ isa = XCConfigurationList;
62
+ buildConfigurations = ();
63
+ defaultConfigurationIsVisible = 0;
64
+ defaultConfigurationName = Release;
65
+ };
66
+ /* End XCConfigurationList section */
67
+
68
+ /* Begin XCRemoteSwiftPackageReference section */
69
+ 11BBD37629C1571400F7A968 /* XCRemoteSwiftPackageReference "Nuke" */ = {
70
+ isa = XCRemoteSwiftPackageReference;
71
+ repositoryURL = "https://github.com/kean/Nuke";
72
+ requirement = {
73
+ branch = main;
74
+ kind = branch;
75
+ };
76
+ };
77
+ /* End XCRemoteSwiftPackageReference section */
78
+ };
79
+ rootObject = F1465EF523AA94BF0055F7C3 /* Project object */;
80
+ }
@@ -0,0 +1,265 @@
1
+ {
2
+ "pins" : [
3
+ {
4
+ "identity" : "abseil-cpp-binary",
5
+ "kind" : "remoteSourceControl",
6
+ "location" : "https://github.com/google/abseil-cpp-binary.git",
7
+ "state" : {
8
+ "revision" : "bfc0b6f81adc06ce5121eb23f628473638d67c5c",
9
+ "version" : "1.2022062300.0"
10
+ }
11
+ },
12
+ {
13
+ "identity" : "analytics-swift",
14
+ "kind" : "remoteSourceControl",
15
+ "location" : "git@github.com:hbmartin/analytics-swift.git",
16
+ "state" : {
17
+ "branch" : "main",
18
+ "revision" : "81ed4a83fc87ef074bb71b2b0bced199811dc3bb"
19
+ }
20
+ },
21
+ {
22
+ "identity" : "firebase-ios-sdk",
23
+ "kind" : "remoteSourceControl",
24
+ "location" : "https://github.com/firebase/firebase-ios-sdk",
25
+ "state" : {
26
+ "revision" : "8a8ec57a272e0d31480fb0893dda0cf4f769b57e",
27
+ "version" : "10.15.0"
28
+ }
29
+ },
30
+ {
31
+ "identity" : "googleappmeasurement",
32
+ "kind" : "remoteSourceControl",
33
+ "location" : "https://github.com/google/GoogleAppMeasurement.git",
34
+ "state" : {
35
+ "revision" : "03b9beee1a61f62d32c521e172e192a1663a5e8b",
36
+ "version" : "10.13.0"
37
+ }
38
+ },
39
+ {
40
+ "identity" : "googledatatransport",
41
+ "kind" : "remoteSourceControl",
42
+ "location" : "https://github.com/google/GoogleDataTransport.git",
43
+ "state" : {
44
+ "revision" : "aae45a320fd0d11811820335b1eabc8753902a40",
45
+ "version" : "9.2.5"
46
+ }
47
+ },
48
+ {
49
+ "identity" : "googleutilities",
50
+ "kind" : "remoteSourceControl",
51
+ "location" : "https://github.com/google/GoogleUtilities.git",
52
+ "state" : {
53
+ "revision" : "c38ce365d77b04a9a300c31061c5227589e5597b",
54
+ "version" : "7.11.5"
55
+ }
56
+ },
57
+ {
58
+ "identity" : "grpc-binary",
59
+ "kind" : "remoteSourceControl",
60
+ "location" : "https://github.com/google/grpc-binary.git",
61
+ "state" : {
62
+ "revision" : "f1b366129d1125be7db83247e003fc333104b569",
63
+ "version" : "1.50.2"
64
+ }
65
+ },
66
+ {
67
+ "identity" : "gtm-session-fetcher",
68
+ "kind" : "remoteSourceControl",
69
+ "location" : "https://github.com/google/gtm-session-fetcher.git",
70
+ "state" : {
71
+ "revision" : "d415594121c9e8a4f9d79cecee0965cf35e74dbd",
72
+ "version" : "3.1.1"
73
+ }
74
+ },
75
+ {
76
+ "identity" : "interop-ios-for-google-sdks",
77
+ "kind" : "remoteSourceControl",
78
+ "location" : "https://github.com/google/interop-ios-for-google-sdks.git",
79
+ "state" : {
80
+ "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648",
81
+ "version" : "100.0.0"
82
+ }
83
+ },
84
+ {
85
+ "identity" : "leveldb",
86
+ "kind" : "remoteSourceControl",
87
+ "location" : "https://github.com/firebase/leveldb.git",
88
+ "state" : {
89
+ "revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
90
+ "version" : "1.22.2"
91
+ }
92
+ },
93
+ {
94
+ "identity" : "lookingglassui",
95
+ "kind" : "remoteSourceControl",
96
+ "location" : "https://github.com/ryanlintott/LookingGlassUI",
97
+ "state" : {
98
+ "revision" : "3257e1b5392a8b39e4620e09cfdb672d2be42855",
99
+ "version" : "0.3.1"
100
+ }
101
+ },
102
+ {
103
+ "identity" : "maplibre-gl-native-distribution",
104
+ "kind" : "remoteSourceControl",
105
+ "location" : "https://github.com/maplibre/maplibre-gl-native-distribution",
106
+ "state" : {
107
+ "revision" : "ffda61e298c1490d4860d5184e80d618aaadc089",
108
+ "version" : "5.13.0"
109
+ }
110
+ },
111
+ {
112
+ "identity" : "nanopb",
113
+ "kind" : "remoteSourceControl",
114
+ "location" : "https://github.com/firebase/nanopb.git",
115
+ "state" : {
116
+ "revision" : "819d0a2173aff699fb8c364b6fb906f7cdb1a692",
117
+ "version" : "2.30909.0"
118
+ }
119
+ },
120
+ {
121
+ "identity" : "nuke",
122
+ "kind" : "remoteSourceControl",
123
+ "location" : "https://github.com/kean/Nuke",
124
+ "state" : {
125
+ "branch" : "main",
126
+ "revision" : "3f666f120b63ea7de57d42e9a7c9b47f8e7a290b"
127
+ }
128
+ },
129
+ {
130
+ "identity" : "phonenumberkit",
131
+ "kind" : "remoteSourceControl",
132
+ "location" : "https://github.com/marmelroy/PhoneNumberKit.git",
133
+ "state" : {
134
+ "revision" : "b456f2f9be10c1d183158220b831afd22697dd68",
135
+ "version" : "3.7.4"
136
+ }
137
+ },
138
+ {
139
+ "identity" : "promises",
140
+ "kind" : "remoteSourceControl",
141
+ "location" : "https://github.com/google/promises.git",
142
+ "state" : {
143
+ "revision" : "e70e889c0196c76d22759eb50d6a0270ca9f1d9e",
144
+ "version" : "2.3.1"
145
+ }
146
+ },
147
+ {
148
+ "identity" : "sentry-cocoa",
149
+ "kind" : "remoteSourceControl",
150
+ "location" : "https://github.com/getsentry/sentry-cocoa.git",
151
+ "state" : {
152
+ "revision" : "14aa6e47b03b820fd2b338728637570b9e969994",
153
+ "version" : "8.12.0"
154
+ }
155
+ },
156
+ {
157
+ "identity" : "sovran-swift",
158
+ "kind" : "remoteSourceControl",
159
+ "location" : "https://github.com/segmentio/Sovran-Swift.git",
160
+ "state" : {
161
+ "revision" : "64f3b5150c282a34af4578188dce2fd597e600e3",
162
+ "version" : "1.1.0"
163
+ }
164
+ },
165
+ {
166
+ "identity" : "swift-algorithms",
167
+ "kind" : "remoteSourceControl",
168
+ "location" : "https://github.com/apple/swift-algorithms.git",
169
+ "state" : {
170
+ "revision" : "bcd4f369ac962bc3e5244c9df778739f8f5bdbf1",
171
+ "version" : "1.1.0"
172
+ }
173
+ },
174
+ {
175
+ "identity" : "swift-argument-parser",
176
+ "kind" : "remoteSourceControl",
177
+ "location" : "https://github.com/apple/swift-argument-parser.git",
178
+ "state" : {
179
+ "revision" : "8f4d2753f0e4778c76d5f05ad16c74f707390531",
180
+ "version" : "1.2.3"
181
+ }
182
+ },
183
+ {
184
+ "identity" : "swift-asn1",
185
+ "kind" : "remoteSourceControl",
186
+ "location" : "https://github.com/apple/swift-asn1.git",
187
+ "state" : {
188
+ "revision" : "3664efa98bd302ec90e5b27ee1c0649fbcc365bc"
189
+ }
190
+ },
191
+ {
192
+ "identity" : "swift-case-paths",
193
+ "kind" : "remoteSourceControl",
194
+ "location" : "https://github.com/pointfreeco/swift-case-paths",
195
+ "state" : {
196
+ "revision" : "5da6989aae464f324eef5c5b52bdb7974725ab81",
197
+ "version" : "1.0.0"
198
+ }
199
+ },
200
+ {
201
+ "identity" : "swift-custom-dump",
202
+ "kind" : "remoteSourceControl",
203
+ "location" : "https://github.com/pointfreeco/swift-custom-dump",
204
+ "state" : {
205
+ "revision" : "3efbfba0e4e56c7187cc19137ee16b7c95346b79",
206
+ "version" : "1.1.0"
207
+ }
208
+ },
209
+ {
210
+ "identity" : "swift-numerics",
211
+ "kind" : "remoteSourceControl",
212
+ "location" : "https://github.com/apple/swift-numerics.git",
213
+ "state" : {
214
+ "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b",
215
+ "version" : "1.0.2"
216
+ }
217
+ },
218
+ {
219
+ "identity" : "swift-protobuf",
220
+ "kind" : "remoteSourceControl",
221
+ "location" : "https://github.com/apple/swift-protobuf.git",
222
+ "state" : {
223
+ "revision" : "cf62cdaea48b77f1a631e5cb3aeda6047c2cba1d",
224
+ "version" : "1.23.0"
225
+ }
226
+ },
227
+ {
228
+ "identity" : "swift-snapshot-testing",
229
+ "kind" : "remoteSourceControl",
230
+ "location" : "https://github.com/pointfreeco/swift-snapshot-testing",
231
+ "state" : {
232
+ "revision" : "696b86a6d151578bca7c1a2a3ed419a5f834d40f",
233
+ "version" : "1.13.0"
234
+ }
235
+ },
236
+ {
237
+ "identity" : "swift-syntax",
238
+ "kind" : "remoteSourceControl",
239
+ "location" : "https://github.com/apple/swift-syntax.git",
240
+ "state" : {
241
+ "revision" : "74203046135342e4a4a627476dd6caf8b28fe11b",
242
+ "version" : "509.0.0"
243
+ }
244
+ },
245
+ {
246
+ "identity" : "swiftui-navigation",
247
+ "kind" : "remoteSourceControl",
248
+ "location" : "https://github.com/pointfreeco/swiftui-navigation",
249
+ "state" : {
250
+ "revision" : "6eb293c49505d86e9e24232cb6af6be7fff93bd5",
251
+ "version" : "1.0.2"
252
+ }
253
+ },
254
+ {
255
+ "identity" : "xctest-dynamic-overlay",
256
+ "kind" : "remoteSourceControl",
257
+ "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay",
258
+ "state" : {
259
+ "revision" : "23cbf2294e350076ea4dbd7d5d047c1e76b03631",
260
+ "version" : "1.0.2"
261
+ }
262
+ }
263
+ ],
264
+ "version" : 2
265
+ }
@@ -0,0 +1,81 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 54;
7
+ objects = {
8
+ /* Begin PBXGroup section */
9
+ F1465EF423AA94BF0055F7C3 = {
10
+ isa = PBXGroup;
11
+ children = (
12
+ F1465EFF23AA94BF0055F7C3 /* Demo */,
13
+ );
14
+ sourceTree = "<group>";
15
+ };
16
+ F1465EFF23AA94BF0055F7C3 /* Demo */ = {
17
+ isa = PBXGroup;
18
+ children = ();
19
+ path = Demo;
20
+ sourceTree = "<group>";
21
+ };
22
+ /* End PBXGroup section */
23
+
24
+ /* Begin PBXProject section */
25
+ F1465EF523AA94BF0055F7C3 /* Project object */ = {
26
+ isa = PBXProject;
27
+ attributes = {
28
+ BuildIndependentTargetsInParallel = YES;
29
+ LastSwiftUpdateCheck = 1420;
30
+ LastUpgradeCheck = 1420;
31
+ TargetAttributes = {
32
+ F1465EFC23AA94BF0055F7C3 = {
33
+ CreatedOnToolsVersion = 11.2.1;
34
+ };
35
+ };
36
+ };
37
+ buildConfigurationList = F1465EF823AA94BF0055F7C3 /* Build configuration list for PBXProject "Demo" */;
38
+ compatibilityVersion = "Xcode 9.3";
39
+ developmentRegion = en;
40
+ hasScannedForEncodings = 0;
41
+ knownRegions = (
42
+ en,
43
+ Base,
44
+ es,
45
+ "zh-Hans",
46
+ fr,
47
+ );
48
+ mainGroup = F1465EF423AA94BF0055F7C3;
49
+ packageReferences = (
50
+ 11BBD37629C1571400F7A968 /* XCRemoteSwiftPackageReference "Nuke" */,
51
+ );
52
+ productRefGroup = F1465EFE23AA94BF0055F7C3 /* Products */;
53
+ projectDirPath = "";
54
+ projectRoot = "";
55
+ targets = ();
56
+ };
57
+ /* End PBXProject section */
58
+
59
+ /* Begin XCConfigurationList section */
60
+ F1465EF823AA94BF0055F7C3 /* Build configuration list for PBXNativeTarget "Demo" */ = {
61
+ isa = XCConfigurationList;
62
+ buildConfigurations = ();
63
+ defaultConfigurationIsVisible = 0;
64
+ defaultConfigurationName = Release;
65
+ };
66
+ /* End XCConfigurationList section */
67
+
68
+ /* Begin XCRemoteSwiftPackageReference section */
69
+ 11BBD37629C1571400F7A968 /* XCRemoteSwiftPackageReference "Nuke" */ = {
70
+ isa = XCRemoteSwiftPackageReference;
71
+ repositoryURL = "https://github.com/kean/Nuke";
72
+ requirement = {
73
+ kind = versionRange;
74
+ maximumVersion = 13.0.0;
75
+ minimumVersion = 12.0.0;
76
+ };
77
+ };
78
+ /* End XCRemoteSwiftPackageReference section */
79
+ };
80
+ rootObject = F1465EF523AA94BF0055F7C3 /* Project object */;
81
+ }