cocoapods 0.35.0 → 0.36.0.beta.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +185 -6
- data/README.md +1 -1
- data/lib/cocoapods.rb +4 -0
- data/lib/cocoapods/command.rb +2 -2
- data/lib/cocoapods/command/inter_process_communication.rb +1 -1
- data/lib/cocoapods/command/lib.rb +3 -0
- data/lib/cocoapods/command/list.rb +0 -35
- data/lib/cocoapods/command/search.rb +1 -2
- data/lib/cocoapods/command/spec.rb +6 -3
- data/lib/cocoapods/config.rb +1 -20
- data/lib/cocoapods/external_sources/abstract_external_source.rb +4 -0
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +107 -0
- data/lib/cocoapods/generator/header.rb +13 -1
- data/lib/cocoapods/generator/info_plist_file.rb +84 -0
- data/lib/cocoapods/generator/module_map.rb +49 -0
- data/lib/cocoapods/generator/umbrella_header.rb +44 -0
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +69 -23
- data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +12 -0
- data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +1 -9
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +79 -1
- data/lib/cocoapods/hooks_manager.rb +75 -13
- data/lib/cocoapods/installer.rb +59 -2
- data/lib/cocoapods/installer/analyzer.rb +115 -38
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +6 -1
- data/lib/cocoapods/installer/file_references_installer.rb +11 -5
- data/lib/cocoapods/installer/migrator.rb +9 -0
- data/lib/cocoapods/installer/target_installer.rb +89 -5
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +49 -5
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +57 -9
- data/lib/cocoapods/installer/user_project_integrator.rb +3 -2
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +67 -6
- data/lib/cocoapods/project.rb +18 -2
- data/lib/cocoapods/resolver.rb +2 -2
- data/lib/cocoapods/sandbox/file_accessor.rb +23 -3
- data/lib/cocoapods/sandbox/headers_store.rb +4 -0
- data/lib/cocoapods/sources_manager.rb +5 -1
- data/lib/cocoapods/target.rb +117 -1
- data/lib/cocoapods/target/aggregate_target.rb +46 -4
- data/lib/cocoapods/target/pod_target.rb +39 -1
- data/lib/cocoapods/user_interface.rb +16 -21
- data/lib/cocoapods/user_interface/error_report.rb +2 -2
- data/lib/cocoapods/validator.rb +68 -23
- metadata +23 -19
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|

|
2
2
|
|
3
|
-
### CocoaPods: The
|
3
|
+
### CocoaPods: The Cocoa dependency manager
|
4
4
|
|
5
5
|
[](https://travis-ci.org/CocoaPods/CocoaPods)
|
6
6
|
[](http://badge.fury.io/rb/cocoapods)
|
data/lib/cocoapods.rb
CHANGED
@@ -56,9 +56,13 @@ module Pod
|
|
56
56
|
autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
|
57
57
|
autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
|
58
58
|
autoload :DummySource, 'cocoapods/generator/dummy_source'
|
59
|
+
autoload :EmbedFrameworksScript, 'cocoapods/generator/embed_frameworks_script'
|
59
60
|
autoload :Header, 'cocoapods/generator/header'
|
61
|
+
autoload :InfoPlistFile, 'cocoapods/generator/info_plist_file'
|
62
|
+
autoload :ModuleMap, 'cocoapods/generator/module_map'
|
60
63
|
autoload :PrefixHeader, 'cocoapods/generator/prefix_header'
|
61
64
|
autoload :TargetEnvironmentHeader, 'cocoapods/generator/target_environment_header'
|
65
|
+
autoload :UmbrellaHeader, 'cocoapods/generator/umbrella_header'
|
62
66
|
autoload :XCConfig, 'cocoapods/generator/xcconfig'
|
63
67
|
end
|
64
68
|
|
data/lib/cocoapods/command.rb
CHANGED
@@ -28,8 +28,8 @@ module Pod
|
|
28
28
|
self.abstract_command = true
|
29
29
|
self.command = 'pod'
|
30
30
|
self.version = VERSION
|
31
|
-
self.description = 'CocoaPods, the
|
32
|
-
self.
|
31
|
+
self.description = 'CocoaPods, the Cocoa library package manager.'
|
32
|
+
self.plugin_prefixes = %w(claide cocoapods)
|
33
33
|
|
34
34
|
[Install, Update, Outdated, IPC::Podfile, IPC::Repl].each { |c| c.send(:include, ProjectDirectory) }
|
35
35
|
|
@@ -113,6 +113,7 @@ module Pod
|
|
113
113
|
['--subspec=NAME', 'Lint validates only the given subspec'],
|
114
114
|
['--no-subspecs', 'Lint skips validation of subspecs'],
|
115
115
|
['--no-clean', 'Lint leaves the build directory intact for inspection'],
|
116
|
+
['--use-frameworks', 'Lint uses frameworks to install the spec'],
|
116
117
|
['--sources=https://github.com/artsy/Specs', 'The sources from which to pull dependant pods ' \
|
117
118
|
'(defaults to https://github.com/CocoaPods/Specs.git). '\
|
118
119
|
'Multiple sources must be comma-delimited.']].concat(super)
|
@@ -124,6 +125,7 @@ module Pod
|
|
124
125
|
@clean = argv.flag?('clean', true)
|
125
126
|
@subspecs = argv.flag?('subspecs', true)
|
126
127
|
@only_subspec = argv.option('subspec')
|
128
|
+
@use_frameworks = argv.flag?('use-frameworks')
|
127
129
|
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
128
130
|
@podspecs_paths = argv.arguments!
|
129
131
|
super
|
@@ -144,6 +146,7 @@ module Pod
|
|
144
146
|
validator.allow_warnings = @allow_warnings
|
145
147
|
validator.no_subspecs = !@subspecs || @only_subspec
|
146
148
|
validator.only_subspec = @only_subspec
|
149
|
+
validator.use_frameworks = @use_frameworks
|
147
150
|
validator.validate
|
148
151
|
|
149
152
|
unless @clean
|
@@ -34,41 +34,6 @@ module Pod
|
|
34
34
|
end
|
35
35
|
|
36
36
|
#-----------------------------------------------------------------------#
|
37
|
-
|
38
|
-
class New < List
|
39
|
-
self.summary = 'Lists pods introduced in the master spec-repo since the last check'
|
40
|
-
|
41
|
-
def run
|
42
|
-
update_if_necessary!
|
43
|
-
|
44
|
-
days = [1, 2, 3, 5, 8]
|
45
|
-
dates, groups = {}, {}
|
46
|
-
days.each { |d| dates[d] = Time.now - 60 * 60 * 24 * d }
|
47
|
-
sets = SourcesManager.aggregate.all_sets
|
48
|
-
statistics_provider = Config.instance.spec_statistics_provider
|
49
|
-
creation_dates = statistics_provider.creation_dates(sets)
|
50
|
-
|
51
|
-
sets.each do |set|
|
52
|
-
set_date = creation_dates[set.name]
|
53
|
-
days.each do |d|
|
54
|
-
if set_date >= dates[d]
|
55
|
-
groups[d] = [] unless groups[d]
|
56
|
-
groups[d] << set
|
57
|
-
break
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
days.reverse.each do |d|
|
62
|
-
sets = groups[d]
|
63
|
-
next unless sets
|
64
|
-
UI.section("\nPods added in the last #{'day'.pluralize(d)}".yellow) do
|
65
|
-
sorted = sets.sort_by { |s| creation_dates[s.name] }
|
66
|
-
mode = @stats ? :stats : :name
|
67
|
-
sorted.each { |set| UI.pod(set, mode, statistics_provider) }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
37
|
end
|
73
38
|
end
|
74
39
|
end
|
@@ -84,11 +84,10 @@ module Pod
|
|
84
84
|
sets.reject! { |set| !set.specification.available_platforms.map(&:name).include?(:osx) }
|
85
85
|
end
|
86
86
|
|
87
|
-
statistics_provider = Config.instance.spec_statistics_provider
|
88
87
|
sets.each do |set|
|
89
88
|
begin
|
90
89
|
if @stats
|
91
|
-
UI.pod(set, :stats
|
90
|
+
UI.pod(set, :stats)
|
92
91
|
else
|
93
92
|
UI.pod(set, :normal)
|
94
93
|
end
|
@@ -68,6 +68,7 @@ module Pod
|
|
68
68
|
['--subspec=NAME', 'Lint validates only the given subspec'],
|
69
69
|
['--no-subspecs', 'Lint skips validation of subspecs'],
|
70
70
|
['--no-clean', 'Lint leaves the build directory intact for inspection'],
|
71
|
+
['--use-frameworks', 'Lint uses frameworks to install the spec'],
|
71
72
|
['--sources=https://github.com/artsy/Specs', 'The sources from which to pull dependant pods ' \
|
72
73
|
'(defaults to https://github.com/CocoaPods/Specs.git). '\
|
73
74
|
'Multiple sources must be comma-delimited.']].concat(super)
|
@@ -79,6 +80,7 @@ module Pod
|
|
79
80
|
@clean = argv.flag?('clean', true)
|
80
81
|
@subspecs = argv.flag?('subspecs', true)
|
81
82
|
@only_subspec = argv.option('subspec')
|
83
|
+
@use_frameworks = argv.flag?('use-frameworks')
|
82
84
|
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
83
85
|
@podspecs_paths = argv.arguments!
|
84
86
|
super
|
@@ -94,6 +96,7 @@ module Pod
|
|
94
96
|
validator.allow_warnings = @allow_warnings
|
95
97
|
validator.no_subspecs = !@subspecs || @only_subspec
|
96
98
|
validator.only_subspec = @only_subspec
|
99
|
+
validator.use_frameworks = @use_frameworks
|
97
100
|
validator.validate
|
98
101
|
invalid_count += 1 unless validator.validated?
|
99
102
|
|
@@ -432,7 +435,7 @@ module Pod
|
|
432
435
|
|
433
436
|
#--------------------------------------#
|
434
437
|
|
435
|
-
# Templates and
|
438
|
+
# Templates and GitHub information retrieval for spec create
|
436
439
|
#
|
437
440
|
# @todo It would be nice to have a template class that accepts options
|
438
441
|
# and uses the default ones if not provided.
|
@@ -580,8 +583,8 @@ Pod::Spec.new do |s|
|
|
580
583
|
# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
581
584
|
#
|
582
585
|
# CocoaPods is smart about how it includes source code. For source files
|
583
|
-
# giving a folder will include any h, m, mm, c & cpp files.
|
584
|
-
# files it will include any header in the folder.
|
586
|
+
# giving a folder will include any swift, h, m, mm, c & cpp files.
|
587
|
+
# For header files it will include any header in the folder.
|
585
588
|
# Not including the public_header_files will make all headers public.
|
586
589
|
#
|
587
590
|
|
data/lib/cocoapods/config.rb
CHANGED
@@ -225,31 +225,12 @@ module Pod
|
|
225
225
|
@default_test_podfile_path ||= templates_dir + 'Podfile.test'
|
226
226
|
end
|
227
227
|
|
228
|
-
# @return [Pathname] The file to use a cache of the statistics provider.
|
229
|
-
#
|
230
|
-
def statistics_cache_file
|
231
|
-
cache_root + 'statistics.yml'
|
232
|
-
end
|
233
|
-
|
234
228
|
# @return [Pathname] The file to use to cache the search data.
|
235
229
|
#
|
236
230
|
def search_index_file
|
237
231
|
cache_root + 'search_index.yaml'
|
238
232
|
end
|
239
233
|
|
240
|
-
public
|
241
|
-
|
242
|
-
#-------------------------------------------------------------------------#
|
243
|
-
|
244
|
-
# @!group Dependency Injection
|
245
|
-
|
246
|
-
# @return [Specification::Set::Statistics] The statistic provider to use
|
247
|
-
# for specifications.
|
248
|
-
#
|
249
|
-
def spec_statistics_provider
|
250
|
-
Specification::Set::Statistics.new(statistics_cache_file)
|
251
|
-
end
|
252
|
-
|
253
234
|
private
|
254
235
|
|
255
236
|
#-------------------------------------------------------------------------#
|
@@ -283,7 +264,7 @@ module Pod
|
|
283
264
|
'CocoaPods.podfile.yaml',
|
284
265
|
'CocoaPods.podfile',
|
285
266
|
'Podfile',
|
286
|
-
]
|
267
|
+
].freeze
|
287
268
|
|
288
269
|
public
|
289
270
|
|
@@ -138,6 +138,10 @@ module Pod
|
|
138
138
|
# @return [void]
|
139
139
|
#
|
140
140
|
def store_podspec(sandbox, spec, json = false)
|
141
|
+
if spec.is_a? Pathname
|
142
|
+
spec = Specification.from_file(spec).to_pretty_json
|
143
|
+
json = true
|
144
|
+
end
|
141
145
|
sandbox.store_podspec(name, spec, true, json)
|
142
146
|
end
|
143
147
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
class EmbedFrameworksScript
|
4
|
+
# @return [TargetDefinition] The target definition, whose label will be
|
5
|
+
# used to locate the target-specific build products.
|
6
|
+
#
|
7
|
+
attr_reader :target_definition
|
8
|
+
|
9
|
+
# @return [Hash{String, Array{String}] Multiple lists of frameworks per
|
10
|
+
# configuration.
|
11
|
+
#
|
12
|
+
attr_reader :frameworks_by_config
|
13
|
+
|
14
|
+
# @param [TargetDefinition] target_definition
|
15
|
+
# @see #target_definition
|
16
|
+
#
|
17
|
+
# @param [Hash{String, Array{String}] frameworks_by_config
|
18
|
+
# @see #frameworks_by_config
|
19
|
+
#
|
20
|
+
def initialize(target_definition, frameworks_by_config)
|
21
|
+
@target_definition = target_definition
|
22
|
+
@frameworks_by_config = frameworks_by_config
|
23
|
+
end
|
24
|
+
|
25
|
+
# Saves the resource script to the given pathname.
|
26
|
+
#
|
27
|
+
# @param [Pathname] pathname
|
28
|
+
# The path where the embed frameworks script should be saved.
|
29
|
+
#
|
30
|
+
# @return [void]
|
31
|
+
#
|
32
|
+
def save_as(pathname)
|
33
|
+
pathname.open('w') do |file|
|
34
|
+
file.puts(script)
|
35
|
+
end
|
36
|
+
File.chmod(0755, pathname.to_s)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# @!group Private Helpers
|
42
|
+
|
43
|
+
# @return [String] The contents of the embed frameworks script.
|
44
|
+
#
|
45
|
+
def script
|
46
|
+
script = <<-eos.strip_heredoc
|
47
|
+
#!/bin/sh
|
48
|
+
set -e
|
49
|
+
|
50
|
+
echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
51
|
+
mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
52
|
+
|
53
|
+
SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
|
54
|
+
|
55
|
+
install_framework()
|
56
|
+
{
|
57
|
+
local source="${BUILT_PRODUCTS_DIR}/#{target_definition.label}/$1"
|
58
|
+
local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
59
|
+
|
60
|
+
if [ -L ${source} ]; then
|
61
|
+
echo "Symlinked..."
|
62
|
+
source=$(readlink "${source}")
|
63
|
+
fi
|
64
|
+
|
65
|
+
# use filter instead of exclude so missing patterns dont' throw errors
|
66
|
+
echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers/\" --filter \"- PrivateHeaders/\" ${source} ${destination}"
|
67
|
+
rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" "${source}" "${destination}"
|
68
|
+
# Resign the code if required by the build settings to avoid unstable apps
|
69
|
+
if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then
|
70
|
+
code_sign "${destination}/$1"
|
71
|
+
fi
|
72
|
+
|
73
|
+
# Embed linked Swift runtime libraries
|
74
|
+
local basename
|
75
|
+
basename=$(echo $1 | sed -E s/\\\\..+// && exit ${PIPESTATUS[0]})
|
76
|
+
local swift_runtime_libs
|
77
|
+
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/$1/${basename}" | grep @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u && exit ${PIPESTATUS[0]})
|
78
|
+
for lib in $swift_runtime_libs; do
|
79
|
+
echo "rsync -av \\"${SWIFT_STDLIB_PATH}/${lib}\\" \\"${destination}\\""
|
80
|
+
rsync -av "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
|
81
|
+
done
|
82
|
+
}
|
83
|
+
|
84
|
+
# Signs a framework with the provided identity
|
85
|
+
code_sign() {
|
86
|
+
# Use the current code_sign_identitiy
|
87
|
+
echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
|
88
|
+
echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1"
|
89
|
+
/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1"
|
90
|
+
}
|
91
|
+
|
92
|
+
eos
|
93
|
+
script += "\n" unless frameworks_by_config.values.all?(&:empty?)
|
94
|
+
frameworks_by_config.each do |config, frameworks|
|
95
|
+
unless frameworks.empty?
|
96
|
+
script += %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
|
97
|
+
frameworks.each do |framework|
|
98
|
+
script += " install_framework '#{framework}'\n"
|
99
|
+
end
|
100
|
+
script += "fi\n"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
script
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -13,7 +13,11 @@ module Pod
|
|
13
13
|
|
14
14
|
# @return [Array<String>] The list of the headers to import.
|
15
15
|
#
|
16
|
-
|
16
|
+
attr_accessor :imports
|
17
|
+
|
18
|
+
# @return [Array<String>] The list of the modules to import.
|
19
|
+
#
|
20
|
+
attr_accessor :module_imports
|
17
21
|
|
18
22
|
# @param [Symbol] platform
|
19
23
|
# @see platform
|
@@ -21,6 +25,7 @@ module Pod
|
|
21
25
|
def initialize(platform)
|
22
26
|
@platform = platform
|
23
27
|
@imports = []
|
28
|
+
@module_imports = []
|
24
29
|
end
|
25
30
|
|
26
31
|
# Generates the contents of the header according to the platform.
|
@@ -41,6 +46,13 @@ module Pod
|
|
41
46
|
result << %|#import "#{import}"\n|
|
42
47
|
end
|
43
48
|
|
49
|
+
unless module_imports.empty?
|
50
|
+
module_imports.each do |import|
|
51
|
+
result << %|\n@import #{import}|
|
52
|
+
end
|
53
|
+
result << "\n"
|
54
|
+
end
|
55
|
+
|
44
56
|
result
|
45
57
|
end
|
46
58
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
# Generates Info.plist files. A Info.plist file is generated for each
|
4
|
+
# Pod and for each Pod target definition, that requires to be built as
|
5
|
+
# framework. It states public attributes.
|
6
|
+
#
|
7
|
+
class InfoPlistFile
|
8
|
+
# @return [Target] the target represented by this Info.plist.
|
9
|
+
#
|
10
|
+
attr_reader :target
|
11
|
+
|
12
|
+
# @param [Target] target @see target
|
13
|
+
#
|
14
|
+
def initialize(target)
|
15
|
+
@target = target
|
16
|
+
end
|
17
|
+
|
18
|
+
# Generates and saves the Info.plist to the given path.
|
19
|
+
#
|
20
|
+
# @param [Pathname] path
|
21
|
+
# the path where the prefix header should be stored.
|
22
|
+
#
|
23
|
+
# @return [void]
|
24
|
+
#
|
25
|
+
def save_as(path)
|
26
|
+
contents = generate
|
27
|
+
path.open('w') do |f|
|
28
|
+
f.write(contents)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# The version associated with the current target
|
33
|
+
#
|
34
|
+
# @note Will return 1.0.0 for the AggregateTarget
|
35
|
+
#
|
36
|
+
# @return [String]
|
37
|
+
#
|
38
|
+
def target_version
|
39
|
+
if target && target.respond_to?(:root_spec)
|
40
|
+
target.root_spec.version.to_s
|
41
|
+
else
|
42
|
+
'1.0.0'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Generates the contents of the Info.plist
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
def generate
|
51
|
+
FILE_CONTENTS.sub('${CURRENT_PROJECT_VERSION_STRING}', target_version)
|
52
|
+
end
|
53
|
+
|
54
|
+
FILE_CONTENTS = <<-EOS
|
55
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
56
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
57
|
+
<plist version="1.0">
|
58
|
+
<dict>
|
59
|
+
<key>CFBundleDevelopmentRegion</key>
|
60
|
+
<string>en</string>
|
61
|
+
<key>CFBundleExecutable</key>
|
62
|
+
<string>${EXECUTABLE_NAME}</string>
|
63
|
+
<key>CFBundleIdentifier</key>
|
64
|
+
<string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
|
65
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
66
|
+
<string>6.0</string>
|
67
|
+
<key>CFBundleName</key>
|
68
|
+
<string>${PRODUCT_NAME}</string>
|
69
|
+
<key>CFBundlePackageType</key>
|
70
|
+
<string>FMWK</string>
|
71
|
+
<key>CFBundleShortVersionString</key>
|
72
|
+
<string>${CURRENT_PROJECT_VERSION_STRING}</string>
|
73
|
+
<key>CFBundleSignature</key>
|
74
|
+
<string>????</string>
|
75
|
+
<key>CFBundleVersion</key>
|
76
|
+
<string>${CURRENT_PROJECT_VERSION}</string>
|
77
|
+
<key>NSPrincipalClass</key>
|
78
|
+
<string></string>
|
79
|
+
</dict>
|
80
|
+
</plist>
|
81
|
+
EOS
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|