cocoapods 1.8.4 → 1.9.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 +69 -1
- data/lib/cocoapods.rb +1 -0
- data/lib/cocoapods/command/setup.rb +1 -0
- data/lib/cocoapods/executable.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +36 -6
- data/lib/cocoapods/generator/prepare_artifacts_script.rb +244 -0
- data/lib/cocoapods/installer.rb +6 -5
- data/lib/cocoapods/installer/analyzer.rb +137 -59
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +27 -12
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +11 -2
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +10 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +15 -2
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +7 -5
- data/lib/cocoapods/installer/user_project_integrator.rb +1 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +100 -19
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +3 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +29 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +7 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +106 -45
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +68 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pods_project_writer.rb +29 -14
- data/lib/cocoapods/sandbox/file_accessor.rb +32 -21
- data/lib/cocoapods/sources_manager.rb +9 -2
- data/lib/cocoapods/target.rb +11 -14
- data/lib/cocoapods/target/aggregate_target.rb +78 -18
- data/lib/cocoapods/target/build_settings.rb +64 -31
- data/lib/cocoapods/target/pod_target.rb +236 -87
- data/lib/cocoapods/user_interface/error_report.rb +14 -4
- data/lib/cocoapods/validator.rb +2 -0
- data/lib/cocoapods/xcode.rb +7 -0
- data/lib/cocoapods/{target → xcode}/framework_paths.rb +14 -1
- data/lib/cocoapods/xcode/linkage_analyzer.rb +22 -0
- data/lib/cocoapods/xcode/xcframework.rb +81 -0
- data/lib/cocoapods/xcode/xcframework/xcframework_slice.rb +51 -0
- metadata +12 -8
- data/lib/cocoapods/target/build_type.rb +0 -139
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 521b794e3dc3aa05b76deb9caa3559045361ba232e2461e45c2900349ee1afd2
|
4
|
+
data.tar.gz: ed3444398cc7fd18a2457a52537d7549f56f14b90326d08f365f47f6279d1b69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e87b619e2dec763de038479a343f52814db87d83900530da5f7981b25670f1270a75f730e8e190b1fba534bb314401405cfd9f190f6f005b55bfbdb1d882635
|
7
|
+
data.tar.gz: b34bd41b5b41318a4c82883995cf7e75ab3eccc344171b87c9b07b31a47a058952ac94057e5a60b27f798cb3e8a4036129a7cd78a2f9b2e8d6676e657ed58082
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,74 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
4
4
|
|
5
5
|
To install release candidates run `[sudo] gem install cocoapods --pre`
|
6
6
|
|
7
|
+
## 1.9.0.beta.1 (2019-12-16)
|
8
|
+
|
9
|
+
##### Enhancements
|
10
|
+
|
11
|
+
* Support for scheme code coverage.
|
12
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
13
|
+
[#8921](https://github.com/CocoaPods/CocoaPods/issues/8921)
|
14
|
+
|
15
|
+
* Support Swift version variants.
|
16
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
17
|
+
[#9230](https://github.com/CocoaPods/CocoaPods/pull/9230)
|
18
|
+
|
19
|
+
* Configure dependencies per configuration.
|
20
|
+
[Samuel Giddins](https://github.com/segiddins)
|
21
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
22
|
+
[#9149](https://github.com/CocoaPods/CocoaPods/pull/9149)
|
23
|
+
|
24
|
+
* Include Podfile Plugin changes for incremental installation.
|
25
|
+
[Sebastian Shanus](https://github.com/sebastianv1)
|
26
|
+
[#9147](https://github.com/CocoaPods/CocoaPods/pull/9147)
|
27
|
+
|
28
|
+
* Integrate `use_frameworks!` linkage DSL.
|
29
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
30
|
+
[#9099](https://github.com/CocoaPods/CocoaPods/issues/9099)
|
31
|
+
|
32
|
+
* Add support for integrating dependency file in user script phases.
|
33
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
34
|
+
[#9082](https://github.com/CocoaPods/CocoaPods/issues/9082)
|
35
|
+
|
36
|
+
* Add support for XCFrameworks using the `vendored_frameworks` Podspec DSL.
|
37
|
+
[Eric Amorde](https://github.com/amorde)
|
38
|
+
[#9148](https://github.com/CocoaPods/CocoaPods/issues/9148)
|
39
|
+
|
40
|
+
##### Bug Fixes
|
41
|
+
|
42
|
+
* Move `run_podfile_post_install_hooks` call to execute right before projects are saved.
|
43
|
+
[Yusuf Sobh](https://github.com/yusufoos)
|
44
|
+
[#9379](https://github.com/CocoaPods/CocoaPods/issues/9379)
|
45
|
+
|
46
|
+
* Do not apply header mapping copy if the spec does not provide a header mappings dir.
|
47
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
48
|
+
[#9308](https://github.com/CocoaPods/CocoaPods/issues/9308)
|
49
|
+
|
50
|
+
* Fix issue where workspace was missing user project references during incremental installation.
|
51
|
+
[Sebastian Shanus](https://github.com/sebastianv1)
|
52
|
+
[#9237](https://github.com/CocoaPods/CocoaPods/issues/9237)
|
53
|
+
|
54
|
+
* Search in users xcconfig's for figuring out when to set `APPLICATION_EXTENSION_API_ONLY`.
|
55
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
56
|
+
[#9233](https://github.com/CocoaPods/CocoaPods/issues/9233)
|
57
|
+
|
58
|
+
* Always generate a lockfile even if project integration is disabled.
|
59
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
60
|
+
[#9288](https://github.com/CocoaPods/CocoaPods/issues/9288)
|
61
|
+
|
62
|
+
* Fix incremental installation with plugins that include arguments with different ordering.
|
63
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
64
|
+
[#9170](https://github.com/CocoaPods/CocoaPods/pull/9170)
|
65
|
+
|
66
|
+
* Move custom `Copy Headers` script phase for header mappings before `Compile Sources`.
|
67
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
68
|
+
[#9131](https://github.com/CocoaPods/CocoaPods/pull/9131)
|
69
|
+
|
70
|
+
* Don't create a conflicting `LaunchScreen.storyboard` when an app spec contains a file
|
71
|
+
with that name in its `resources`.
|
72
|
+
[Samuel Giddins](https://github.com/segiddins)
|
73
|
+
|
74
|
+
|
7
75
|
## 1.8.4 (2019-10-16)
|
8
76
|
|
9
77
|
##### Enhancements
|
@@ -50,7 +118,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
50
118
|
|
51
119
|
* Include dependent vendored frameworks in linker flags
|
52
120
|
[Alex Coomans](https://github.com/drcapulet)
|
53
|
-
[#9045](
|
121
|
+
[#9045](https://github.com/CocoaPods/CocoaPods/pull/9045)
|
54
122
|
|
55
123
|
* Correctly set deployment target for non library specs even if the root spec does not specify one.
|
56
124
|
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
data/lib/cocoapods.rb
CHANGED
@@ -62,6 +62,7 @@ module Pod
|
|
62
62
|
autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
|
63
63
|
autoload :DummySource, 'cocoapods/generator/dummy_source'
|
64
64
|
autoload :EmbedFrameworksScript, 'cocoapods/generator/embed_frameworks_script'
|
65
|
+
autoload :PrepareArtifactsScript, 'cocoapods/generator/prepare_artifacts_script'
|
65
66
|
autoload :FileList, 'cocoapods/generator/file_list'
|
66
67
|
autoload :Header, 'cocoapods/generator/header'
|
67
68
|
autoload :InfoPlistFile, 'cocoapods/generator/info_plist_file'
|
data/lib/cocoapods/executable.rb
CHANGED
@@ -163,7 +163,7 @@ module Pod
|
|
163
163
|
status = result.last
|
164
164
|
unless status.success?
|
165
165
|
output = result[0..-2].join
|
166
|
-
raise Informative, "#{
|
166
|
+
raise Informative, "#{executable} #{command.join(' ')}\n\n#{output}".strip
|
167
167
|
end
|
168
168
|
end
|
169
169
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'cocoapods/
|
1
|
+
require 'cocoapods/xcode'
|
2
2
|
|
3
3
|
module Pod
|
4
4
|
module Generator
|
@@ -91,8 +91,8 @@ module Pod
|
|
91
91
|
fi
|
92
92
|
|
93
93
|
# Use filter instead of exclude so missing patterns don't throw errors.
|
94
|
-
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${source}\\" \\"${destination}\\""
|
95
|
-
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
|
94
|
+
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${source}\\" \\"${destination}\\""
|
95
|
+
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
|
96
96
|
|
97
97
|
local basename
|
98
98
|
basename="$(basename -s .framework "$1")"
|
@@ -145,8 +145,8 @@ module Pod
|
|
145
145
|
|
146
146
|
if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
|
147
147
|
# Move the stripped file into its final destination.
|
148
|
-
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\" \\"${DWARF_DSYM_FOLDER_PATH}\\""
|
149
|
-
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
|
148
|
+
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\" \\"${DWARF_DSYM_FOLDER_PATH}\\""
|
149
|
+
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
|
150
150
|
else
|
151
151
|
# The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
|
152
152
|
touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
|
@@ -204,8 +204,38 @@ module Pod
|
|
204
204
|
STRIP_BINARY_RETVAL=1
|
205
205
|
}
|
206
206
|
|
207
|
+
install_artifact() {
|
208
|
+
artifact="$1"
|
209
|
+
base="$(basename "$artifact")"
|
210
|
+
case $base in
|
211
|
+
*.framework)
|
212
|
+
install_framework "$artifact"
|
213
|
+
;;
|
214
|
+
*.dSYM)
|
215
|
+
install_dsym "$artifact"
|
216
|
+
;;
|
217
|
+
*.bcsymbolmap)
|
218
|
+
install_bcsymbolmap "$artifact"
|
219
|
+
;;
|
220
|
+
*)
|
221
|
+
echo "error: Unrecognized artifact "$artifact""
|
222
|
+
;;
|
223
|
+
esac
|
224
|
+
}
|
225
|
+
|
226
|
+
copy_artifacts() {
|
227
|
+
file_list="$1"
|
228
|
+
while read artifact; do
|
229
|
+
install_artifact "$artifact"
|
230
|
+
done <$file_list
|
231
|
+
}
|
232
|
+
|
233
|
+
ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
|
234
|
+
if [ -r "${ARTIFACT_LIST_FILE}" ]; then
|
235
|
+
copy_artifacts "${ARTIFACT_LIST_FILE}"
|
236
|
+
fi
|
237
|
+
|
207
238
|
SH
|
208
|
-
script << "\n" unless frameworks_by_config.each_value.all?(&:empty?)
|
209
239
|
frameworks_by_config.each do |config, frameworks_with_dsyms|
|
210
240
|
next if frameworks_with_dsyms.empty?
|
211
241
|
script << %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
|
@@ -0,0 +1,244 @@
|
|
1
|
+
require 'cocoapods/xcode'
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
module Generator
|
5
|
+
class PrepareArtifactsScript
|
6
|
+
# @return [Hash{String => Array<Pod::Xcode::XCFramework>}] Multiple lists of xcframeworks per
|
7
|
+
# configuration.
|
8
|
+
#
|
9
|
+
attr_reader :xcframeworks_by_config
|
10
|
+
|
11
|
+
# @return [Pathname] the root directory of the sandbox
|
12
|
+
#
|
13
|
+
attr_reader :sandbox_root
|
14
|
+
|
15
|
+
# @return [Platform] the platform of the target for which this script will run
|
16
|
+
#
|
17
|
+
attr_reader :platform
|
18
|
+
|
19
|
+
# @param [Hash{String => Array<Pod::Xcode::XCFramework>] xcframeworks_by_config
|
20
|
+
# @see #xcframeworks_by_config
|
21
|
+
#
|
22
|
+
# @param [Pathname] sandbox_root
|
23
|
+
# the sandbox root of the installation
|
24
|
+
#
|
25
|
+
# @param [Platform] platform
|
26
|
+
# the platform of the target for which this script will run
|
27
|
+
#
|
28
|
+
def initialize(xcframeworks_by_config, sandbox_root, platform)
|
29
|
+
@xcframeworks_by_config = xcframeworks_by_config
|
30
|
+
@sandbox_root = sandbox_root
|
31
|
+
@platform = platform
|
32
|
+
end
|
33
|
+
|
34
|
+
# Saves the resource script to the given pathname.
|
35
|
+
#
|
36
|
+
# @param [Pathname] pathname
|
37
|
+
# The path where the embed frameworks script should be saved.
|
38
|
+
#
|
39
|
+
# @return [void]
|
40
|
+
#
|
41
|
+
def save_as(pathname)
|
42
|
+
pathname.open('w') do |file|
|
43
|
+
file.puts(script)
|
44
|
+
end
|
45
|
+
File.chmod(0o755, pathname.to_s)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [String] The contents of the embed frameworks script.
|
49
|
+
#
|
50
|
+
def generate
|
51
|
+
script
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# @!group Private Helpers
|
57
|
+
|
58
|
+
# @return [String] The contents of the prepare artifacts script.
|
59
|
+
#
|
60
|
+
def script
|
61
|
+
script = <<-SH.strip_heredoc
|
62
|
+
#!/bin/sh
|
63
|
+
set -e
|
64
|
+
set -u
|
65
|
+
set -o pipefail
|
66
|
+
|
67
|
+
function on_error {
|
68
|
+
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
|
69
|
+
}
|
70
|
+
trap 'on_error $LINENO' ERR
|
71
|
+
|
72
|
+
if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
|
73
|
+
# If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
|
74
|
+
# frameworks to, so exit 0 (signalling the script phase was successful).
|
75
|
+
exit 0
|
76
|
+
fi
|
77
|
+
|
78
|
+
# This protects against multiple targets copying the same framework dependency at the same time. The solution
|
79
|
+
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
|
80
|
+
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
|
81
|
+
|
82
|
+
ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
|
83
|
+
cat > $ARTIFACT_LIST_FILE
|
84
|
+
|
85
|
+
BCSYMBOLMAP_DIR="BCSymbolMaps"
|
86
|
+
|
87
|
+
record_artifact()
|
88
|
+
{
|
89
|
+
echo "$1" >> $ARTIFACT_LIST_FILE
|
90
|
+
}
|
91
|
+
|
92
|
+
install_artifact()
|
93
|
+
{
|
94
|
+
local source="$1"
|
95
|
+
local destination="$2"
|
96
|
+
local record=${3:-false}
|
97
|
+
|
98
|
+
# Use filter instead of exclude so missing patterns don't throw errors.
|
99
|
+
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" \\"${source}\\" \\"${destination}\\""
|
100
|
+
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}" "${destination}"
|
101
|
+
|
102
|
+
if [[ "$record" == "true" ]]; then
|
103
|
+
artifact="${destination}/$(basename "$source")"
|
104
|
+
record_artifact "$artifact"
|
105
|
+
fi
|
106
|
+
}
|
107
|
+
|
108
|
+
# Copies a framework to derived data for use in later build phases
|
109
|
+
install_framework()
|
110
|
+
{
|
111
|
+
if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
|
112
|
+
local source="${BUILT_PRODUCTS_DIR}/$1"
|
113
|
+
elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
|
114
|
+
local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
|
115
|
+
elif [ -r "$1" ]; then
|
116
|
+
local source="$1"
|
117
|
+
fi
|
118
|
+
|
119
|
+
local record_artifact=${2:-true}
|
120
|
+
local destination="${TARGET_BUILD_DIR}"
|
121
|
+
|
122
|
+
if [ -L "${source}" ]; then
|
123
|
+
echo "Symlinked..."
|
124
|
+
source="$(readlink "${source}")"
|
125
|
+
fi
|
126
|
+
|
127
|
+
install_artifact "$source" "$destination" "$record_artifact"
|
128
|
+
|
129
|
+
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
|
130
|
+
# Locate and install any .bcsymbolmaps if present
|
131
|
+
find "${source}/${BCSYMBOLMAP_DIR}/" -name "*.bcsymbolmap"|while read f; do
|
132
|
+
install_artifact "$f" "$destination" "true"
|
133
|
+
done
|
134
|
+
fi
|
135
|
+
}
|
136
|
+
|
137
|
+
install_xcframework() {
|
138
|
+
local basepath="$1"
|
139
|
+
local embed="$2"
|
140
|
+
shift
|
141
|
+
local paths=("$@")
|
142
|
+
|
143
|
+
# Locate the correct slice of the .xcframework for the current architectures
|
144
|
+
local target_path=""
|
145
|
+
local target_arch="$ARCHS"
|
146
|
+
local target_variant=""
|
147
|
+
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
|
148
|
+
target_variant="simulator"
|
149
|
+
fi
|
150
|
+
if [[ "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
|
151
|
+
target_variant="maccatalyst"
|
152
|
+
fi
|
153
|
+
for i in ${!paths[@]}; do
|
154
|
+
if [[ "${paths[$i]}" == *"$target_arch"* ]] && [[ "${paths[$i]}" == *"$target_variant"* ]]; then
|
155
|
+
# Found a matching slice
|
156
|
+
echo "Selected xcframework slice ${paths[$i]}"
|
157
|
+
target_path=${paths[$i]}
|
158
|
+
break;
|
159
|
+
fi
|
160
|
+
done
|
161
|
+
|
162
|
+
if [[ -z "$target_path" ]]; then
|
163
|
+
echo "warning: [CP] Unable to find matching .xcframework slice in '${paths[@]}' for the current build architectures ($ARCHS)."
|
164
|
+
return
|
165
|
+
fi
|
166
|
+
|
167
|
+
install_framework "$basepath/$target_path" "$embed"
|
168
|
+
}
|
169
|
+
|
170
|
+
SH
|
171
|
+
contents_by_config = Hash.new do |hash, key|
|
172
|
+
hash[key] = ''
|
173
|
+
end
|
174
|
+
xcframeworks_by_config.each do |config, xcframeworks|
|
175
|
+
next if xcframeworks.empty?
|
176
|
+
xcframeworks.each do |xcframework|
|
177
|
+
slices = xcframework.slices.select { |f| f.platform.symbolic_name == platform.symbolic_name }
|
178
|
+
dynamic_slices, static_slices = slices.partition { |slice| Xcode::LinkageAnalyzer.dynamic_binary?(slice.binary_path) }
|
179
|
+
next if dynamic_slices.empty? && static_slices.empty?
|
180
|
+
unless dynamic_slices.empty?
|
181
|
+
args = install_xcframework_args(xcframework.path, dynamic_slices, false)
|
182
|
+
contents_by_config[config] << %( install_xcframework #{args}\n)
|
183
|
+
end
|
184
|
+
|
185
|
+
unless static_slices.empty?
|
186
|
+
args = install_xcframework_args(xcframework.path, static_slices, true)
|
187
|
+
contents_by_config[config] << %( install_xcframework #{args}\n)
|
188
|
+
end
|
189
|
+
|
190
|
+
dsyms = PrepareArtifactsScript.dsym_paths(xcframework.path)
|
191
|
+
dsyms.each do |path|
|
192
|
+
source = shell_escape("${PODS_ROOT}/#{path.relative_path_from(sandbox_root)}")
|
193
|
+
contents_by_config[config] << %( install_artifact #{source} "${TARGET_BUILD_DIR}" "true"\n)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
script << "\n" unless contents_by_config.empty?
|
199
|
+
contents_by_config.keys.sort.each do |config|
|
200
|
+
contents = contents_by_config[config]
|
201
|
+
next if contents.empty?
|
202
|
+
script << %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
|
203
|
+
script << contents
|
204
|
+
script << "fi\n"
|
205
|
+
end
|
206
|
+
|
207
|
+
script << "\necho \"Artifact list stored at $ARTIFACT_LIST_FILE\"\n"
|
208
|
+
script << "\ncat \"$ARTIFACT_LIST_FILE\"\n"
|
209
|
+
script
|
210
|
+
end
|
211
|
+
|
212
|
+
def shell_escape(value)
|
213
|
+
"\"#{value}\""
|
214
|
+
end
|
215
|
+
|
216
|
+
def install_xcframework_args(root, slices, static)
|
217
|
+
args = [shell_escape("${PODS_ROOT}/#{root.relative_path_from(sandbox_root)}")]
|
218
|
+
embed = static ? 'false' : 'true'
|
219
|
+
args << shell_escape(embed)
|
220
|
+
slices.each do |slice|
|
221
|
+
args << shell_escape(slice.path.relative_path_from(root))
|
222
|
+
end
|
223
|
+
args.join(' ')
|
224
|
+
end
|
225
|
+
|
226
|
+
class << self
|
227
|
+
# @param [Pathname] xcframework_path
|
228
|
+
# the base path of the .xcframework bundle
|
229
|
+
#
|
230
|
+
# @return [Array<Pathname>] all found .dSYM paths
|
231
|
+
#
|
232
|
+
def dsym_paths(xcframework_path)
|
233
|
+
basename = File.basename(xcframework_path, '.xcframework')
|
234
|
+
dsym_basename = basename + '.dSYMs'
|
235
|
+
path = xcframework_path.dirname + dsym_basename
|
236
|
+
return [] unless File.directory?(path)
|
237
|
+
|
238
|
+
pattern = path + '*.dSYM'
|
239
|
+
Dir.glob(pattern).map { |s| Pathname.new(s) }
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
data/lib/cocoapods/installer.rb
CHANGED
@@ -161,6 +161,7 @@ module Pod
|
|
161
161
|
else
|
162
162
|
integrate
|
163
163
|
end
|
164
|
+
write_lockfiles
|
164
165
|
perform_post_install_actions
|
165
166
|
end
|
166
167
|
|
@@ -194,7 +195,7 @@ module Pod
|
|
194
195
|
|
195
196
|
force_clean_install = clean_install || project_cache_version.version != Version.create(VersionMetadata.project_cache_version)
|
196
197
|
cache_result = ProjectCache::ProjectCacheAnalyzer.new(sandbox, installation_cache, analysis_result.all_user_build_configurations,
|
197
|
-
object_version, pod_targets, aggregate_targets, :clean_install => force_clean_install).analyze
|
198
|
+
object_version, plugins, pod_targets, aggregate_targets, :clean_install => force_clean_install).analyze
|
198
199
|
aggregate_targets_to_generate = cache_result.aggregate_targets_to_generate || []
|
199
200
|
pod_targets_to_generate = cache_result.pod_targets_to_generate
|
200
201
|
(aggregate_targets_to_generate + pod_targets_to_generate).each do |target|
|
@@ -296,7 +297,6 @@ module Pod
|
|
296
297
|
SandboxDirCleaner.new(sandbox, pod_targets, aggregate_targets).clean!
|
297
298
|
|
298
299
|
update_project_cache(cache_analysis_result, target_installation_results)
|
299
|
-
write_lockfiles
|
300
300
|
end
|
301
301
|
|
302
302
|
def create_and_save_projects(pod_targets_to_generate, aggregate_targets_to_generate, build_configurations, project_object_version)
|
@@ -319,11 +319,11 @@ module Pod
|
|
319
319
|
predictabilize_uuids(generated_projects) if installation_options.deterministic_uuids?
|
320
320
|
stabilize_target_uuids(generated_projects)
|
321
321
|
|
322
|
-
run_podfile_post_install_hooks
|
323
|
-
|
324
322
|
projects_writer = Xcode::PodsProjectWriter.new(sandbox, generated_projects,
|
325
323
|
target_installation_results.pod_target_installation_results, installation_options)
|
326
|
-
projects_writer.write!
|
324
|
+
projects_writer.write! do
|
325
|
+
run_podfile_post_install_hooks
|
326
|
+
end
|
327
327
|
|
328
328
|
pods_project_pod_targets = pod_targets_to_generate - projects_by_pod_targets.values.flatten
|
329
329
|
all_projects_by_pod_targets = {}
|
@@ -775,6 +775,7 @@ module Pod
|
|
775
775
|
installation_cache.update_cache_key_by_target_label!(cache_analysis_result.cache_key_by_target_label)
|
776
776
|
installation_cache.update_project_object_version!(cache_analysis_result.project_object_version)
|
777
777
|
installation_cache.update_build_configurations!(cache_analysis_result.build_configurations)
|
778
|
+
installation_cache.update_podfile_plugins!(plugins)
|
778
779
|
installation_cache.save_as(sandbox.project_installation_cache_path)
|
779
780
|
|
780
781
|
metadata_cache.update_metadata!(target_installation_results.pod_target_installation_results || {},
|