@@ -77,6 +77,61 @@ function printhelp() {
7777 exit $EXIT_CODE
7878}
7979
80+ # Function Declarations
81+
82+ function cleanup() {
83+ cd " $CURRENT_DIR "
84+ if [[ " $VERBOSE " != " 1" && " $BUILD_DIR_IS_TEMP " == " 1" && (" $NO_CLEAN " == " 1" || (" $NO_CLEAN_ON_FAIL " == " 1" && " $EXIT_CODE " ! = " 0" )) ]]; then
85+ if [ " $EXIT_CODE " == " 0" ]; then
86+ " $SCRIPTS_DIR /printformat.sh" " foreground:yellow" " Build Directory: $BUILD_DIR "
87+ fi
88+ elif [ " $BUILD_DIR_IS_TEMP " == " 1" ]; then
89+ rm -rf " $BUILD_DIR "
90+ fi
91+
92+ #
93+
94+ if [ " ${# EXIT_MESSAGE} " != 0 ]; then
95+ echo -e " $EXIT_MESSAGE " 1>&2
96+ fi
97+
98+ exit $EXIT_CODE
99+ }
100+
101+ function checkresult() {
102+ if [ " $1 " != " 0" ]; then
103+ if [ " ${# 2} " != " 0" ]; then
104+ EXIT_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:red" " $2 " ) "
105+ fi
106+
107+ EXIT_CODE=$1
108+ cleanup
109+ fi
110+ }
111+
112+ function createlogfile() {
113+ if [ ! -d " $BUILD_DIR /Logs" ]; then
114+ mkdir -p " $BUILD_DIR /Logs"
115+ fi
116+
117+ local LOG=" $BUILD_DIR /Logs/$1 .log"
118+ touch " $LOG "
119+
120+ echo " $LOG "
121+ }
122+
123+ function errormessage() {
124+ local ERROR_MESSAGE=" "
125+
126+ if [[ " $NO_CLEAN " == " 1" ]] || [[ " $NO_CLEAN_ON_FAIL " == " 1" ]]; then
127+ ERROR_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:default" " Build Failed. See xcodebuild log for more details: $( " $SCRIPTS_DIR /printformat.sh" " foreground:yellow" " $1 " ) " ) "
128+ elif [ " $VERBOSE " != " 1" ]; then
129+ ERROR_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:default" " Build Failed. Use the '--no-clean' or '--no-clean-on-fail' flag to inspect the logs." ) "
130+ fi
131+
132+ echo " $ERROR_MESSAGE "
133+ }
134+
80135# Parse Arguments
81136
82137while [[ $# -gt 0 ]]; do
@@ -158,11 +213,39 @@ done
158213if [ " ${# WORKSPACE_NAME} " != 0 ]; then
159214 USE_WORKSPACE=1
160215 WORKSPACE_NAME=" $( " $SCRIPTS_DIR /findworkspace.sh" --workspace-name " $WORKSPACE_NAME " ) "
161- FRAMEWORK_NAME=" $WORKSPACE_NAME "
216+
217+ checkresult $?
162218elif [ " ${# PROJECT_NAME} " != 0 ]; then
163219 USE_WORKSPACE=0
164220 PROJECT_NAME=" $( " $SCRIPTS_DIR /findproject.sh" --project-name " $PROJECT_NAME " ) "
165- FRAMEWORK_NAME=" $PROJECT_NAME "
221+
222+ checkresult $?
223+ else
224+ WORKSPACE_NAME=" $( " $SCRIPTS_DIR /findworkspace.sh" ) " 2> /dev/null
225+ RESULT=$?
226+
227+ if [[ " $RESULT " == 0 ]] && [[ " ${# WORKSPACE_NAME} " != 0 ]]; then
228+ USE_WORKSPACE=1
229+ else
230+ PROJECT_NAME=" $( " $SCRIPTS_DIR /findproject.sh" ) " 2> /dev/null
231+ RESULT=$?
232+
233+ if [[ " $RESULT " == 0 ]] && [[ " ${# PROJECT_NAME} " != 0 ]]; then
234+ USE_WORKSPACE=0
235+ else
236+ checkresult 1 " Unable to find specific Xcode project or workspace in the root directory. Try specifying a project or workspace name:\n"
237+ fi
238+ fi
239+ fi
240+
241+ if [ " $USE_WORKSPACE " == " 1" ]; then
242+ PRODUCT_NAME=" $WORKSPACE_NAME "
243+ FULL_PRODUCT_NAME=" $WORKSPACE_NAME .xcworkspace"
244+ XCODEBUILD_ARGS=(-workspace " $FULL_PRODUCT_NAME " )
245+ else
246+ PRODUCT_NAME=" $PROJECT_NAME "
247+ FULL_PRODUCT_NAME=" $PROJECT_NAME .xcodeproj"
248+ XCODEBUILD_ARGS=(-project " $FULL_PRODUCT_NAME " )
166249fi
167250
168251EXIT_CODE=$?
174257#
175258
176259if [ -z ${OUTPUT+x} ]; then
177- OUTPUT=" $SCRIPTS_DIR /build/$FRAMEWORK_NAME .xcframework"
260+ OUTPUT=" $SCRIPTS_DIR /build/$PRODUCT_NAME .xcframework"
178261elif [ " ${OUTPUT##* .} " != " xcframework" ]; then
179262 if [ " ${OUTPUT: -1} " == " /" ]; then
180- OUTPUT=" ${OUTPUT}${FRAMEWORK_NAME } .xcframework"
263+ OUTPUT=" ${OUTPUT}${PRODUCT_NAME } .xcframework"
181264 else
182- OUTPUT=" ${OUTPUT} /${FRAMEWORK_NAME } .xcframework"
265+ OUTPUT=" ${OUTPUT} /${PRODUCT_NAME } .xcframework"
183266 fi
184267fi
185268
@@ -190,7 +273,7 @@ if [ -z ${CONFIGURATION+x} ]; then
190273fi
191274
192275if [ -z ${BUILD_DIR+x} ]; then
193- BUILD_DIR=" $( mktemp -d -t " .$( echo " $FRAMEWORK_NAME " | tr ' [:upper:]' ' [:lower:]' ) .xcframework.build" ) "
276+ BUILD_DIR=" $( mktemp -d -t " .$( echo " $PRODUCT_NAME " | tr ' [:upper:]' ' [:lower:]' ) .xcframework.build" ) "
194277 BUILD_DIR_IS_TEMP=1
195278else
196279 mkdir -p " $BUILD_DIR "
@@ -202,76 +285,16 @@ else
202285 fi
203286fi
204287
205- # Function Declarations
206-
207- function cleanup() {
208- cd " $CURRENT_DIR "
209- if [[ " $VERBOSE " != " 1" && " $BUILD_DIR_IS_TEMP " == " 1" && (" $NO_CLEAN " == " 1" || (" $NO_CLEAN_ON_FAIL " == " 1" && " $EXIT_CODE " ! = " 0" )) ]]; then
210- if [ " $EXIT_CODE " == " 0" ]; then
211- " $SCRIPTS_DIR /printformat.sh" " foreground:yellow" " Build Directory: $BUILD_DIR "
212- fi
213- elif [ " $BUILD_DIR_IS_TEMP " == " 1" ]; then
214- rm -rf " $BUILD_DIR "
215- fi
216-
217- #
218-
219- if [ " ${# EXIT_MESSAGE} " != 0 ]; then
220- echo -e " $EXIT_MESSAGE " 1>&2
221- fi
222-
223- exit $EXIT_CODE
224- }
225-
226- function checkresult() {
227- if [ " $1 " != " 0" ]; then
228- if [ " ${# 2} " != " 0" ]; then
229- EXIT_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:red" " $2 " ) "
230- fi
231-
232- EXIT_CODE=$1
233- cleanup
234- fi
235- }
236-
237- function createlogfile() {
238- if [ ! -d " $BUILD_DIR /Logs" ]; then
239- mkdir -p " $BUILD_DIR /Logs"
240- fi
241-
242- local LOG=" $BUILD_DIR /Logs/$1 .log"
243- touch " $LOG "
244-
245- echo " $LOG "
246- }
247-
248- function errormessage() {
249- local ERROR_MESSAGE=" "
250-
251- if [[ " $NO_CLEAN " == " 1" ]] || [[ " $NO_CLEAN_ON_FAIL " == " 1" ]]; then
252- ERROR_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:default" " Build Failed. See xcodebuild log for more details: $( " $SCRIPTS_DIR /printformat.sh" " foreground:yellow" " $1 " ) " ) "
253- elif [ " $VERBOSE " != " 1" ]; then
254- ERROR_MESSAGE=" $( " $SCRIPTS_DIR /printformat.sh" " foreground:default" " Build Failed. Use the '--no-clean' or '--no-clean-on-fail' flag to inspect the logs." ) "
255- fi
256-
257- echo " $ERROR_MESSAGE "
258- }
259-
260288# Build Platforms
261289
262290cd " $ROOT_DIR "
263291
264292#
265293
266294for PLATFORM in " iOS" " iOS Simulator" " Mac Catalyst" " macOS" " tvOS" " tvOS Simulator" " watchOS" " watchOS Simulator" ; do
267- if [ " $USE_WORKSPACE " == " 1" ]; then
268- SCHEME=" ${WORKSPACE_NAME} "
269- echo -e " $( " $SCRIPTS_DIR /printformat.sh" " foreground:blue" " ***" ) Building $( " $SCRIPTS_DIR /printformat.sh" " foreground:green" " $PLATFORM " ) architecture(s) of $( " $SCRIPTS_DIR /printformat.sh" " bold" " ${WORKSPACE_NAME} .xcworkspace" ) "
270- else
271- SCHEME=" ${PROJECT_NAME} "
272- echo -e " $( " $SCRIPTS_DIR /printformat.sh" " foreground:blue" " ***" ) Building $( " $SCRIPTS_DIR /printformat.sh" " foreground:green" " $PLATFORM " ) architecture(s) of $( " $SCRIPTS_DIR /printformat.sh" " bold" " ${PROJECT_NAME} .xcodeproj" ) "
273- fi
295+ echo -e " $( " $SCRIPTS_DIR /printformat.sh" " foreground:blue" " ***" ) Building $( " $SCRIPTS_DIR /printformat.sh" " foreground:green" " $PLATFORM " ) architecture(s) of $( " $SCRIPTS_DIR /printformat.sh" " bold" " $FULL_PRODUCT_NAME " ) "
274296
297+ SCHEME=" ${PRODUCT_NAME} "
275298 ARCHIVE=" "
276299 ARCHS=" "
277300
@@ -328,22 +351,14 @@ for PLATFORM in "iOS" "iOS Simulator" "Mac Catalyst" "macOS" "tvOS" "tvOS Simula
328351 #
329352
330353 if [ " $VERBOSE " == " 1" ]; then
331- if [ " $USE_WORKSPACE " == " 1" ]; then
332- xcodebuild -workspace " ${WORKSPACE_NAME} .xcworkspace" -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive
333- else
334- xcodebuild -project " ${PROJECT_NAME} .xcodeproj" -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive
335- fi
354+ xcodebuild " ${XCODEBUILD_ARGS[@]} " -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive
336355 else
337356 LOG=" $( createlogfile " $ARCHIVE -build" ) "
338357 ERROR_MESSAGE=" $( errormessage " $LOG " ) "
339358
340359 #
341360
342- if [ " $USE_WORKSPACE " == " 1" ]; then
343- xcodebuild -workspace " ${WORKSPACE_NAME} .xcworkspace" -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive > " $LOG " 2>&1
344- else
345- xcodebuild -project " ${PROJECT_NAME} .xcodeproj" -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive > " $LOG " 2>&1
346- fi
361+ xcodebuild " ${XCODEBUILD_ARGS[@]} " -scheme " $SCHEME " -destination " generic/platform=$PLATFORM " -archivePath " ${BUILD_DIR} /$ARCHIVE .xcarchive" -configuration ${CONFIGURATION} SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES ONLY_ACTIVE_ARCH=NO ARCHS=" $ARCHS " " ${BUILD_ARGS[@]} " archive > " $LOG " 2>&1
347362 fi
348363
349364 checkresult $? " $ERROR_MESSAGE "
358373ARGUMENTS=(-create-xcframework -output " $( readlink -f " $( dirname " ${OUTPUT} " ) " ) /$( basename " ${OUTPUT} " ) " )
359374
360375for ARCHIVE in ${BUILD_DIR} /* .xcarchive; do
361- ARGUMENTS=(${ARGUMENTS[@]} -framework " $( readlink -f " ${ARCHIVE} /Products/Library/Frameworks/${FRAMEWORK_NAME } .framework" ) " )
376+ ARGUMENTS=(${ARGUMENTS[@]} -framework " $( readlink -f " ${ARCHIVE} /Products/Library/Frameworks/${PRODUCT_NAME } .framework" ) " )
362377
363378 if [ " $EXCLUDE_DSYMS " != " 1" ]; then
364- if [[ -d " ${ARCHIVE} /dSYMs/${FRAMEWORK_NAME } .framework.dSYM" ]]; then
365- ARGUMENTS=(${ARGUMENTS[@]} -debug-symbols " $( readlink -f " ${ARCHIVE} /dSYMs/${FRAMEWORK_NAME } .framework.dSYM" ) " )
379+ if [[ -d " ${ARCHIVE} /dSYMs/${PRODUCT_NAME } .framework.dSYM" ]]; then
380+ ARGUMENTS=(${ARGUMENTS[@]} -debug-symbols " $( readlink -f " ${ARCHIVE} /dSYMs/${PRODUCT_NAME } .framework.dSYM" ) " )
366381 fi
367382
368383 if [[ -d " ${ARCHIVE} /BCSymbolMaps" ]]; then
0 commit comments