55 puts ( 'xcodeproj doesn\'t exist' )
66 Kernel . exit ( 0 )
77end
8- require 'fileutils'
98
109# Replace these with your values
1110current_path = Dir . pwd
1211project_path = Dir . glob ( "#{ current_path } /ios/*.xcodeproj" ) . first
1312file_name = File . basename ( project_path , ".xcodeproj" )
14- project_location = ' ./ios/' + file_name + ' .xcodeproj'
13+ project_location = " ./ios/#{ file_name } .xcodeproj"
1514target_name = file_name
1615framework_root = '../node_modules/instabug-reactnative/ios'
1716framework_name = 'Instabug.framework'
1817
1918INSTABUG_PHASE_NAME = "Strip Frameworks"
19+
2020INSTABUG_PHASE_SCRIPT = <<-SCRIPTEND
2121bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Instabug.framework/Instabug.bundle/strip-frameworks.sh"
2222 SCRIPTEND
2323
2424# Get useful variables
2525project = Xcodeproj ::Project . open ( project_location )
2626frameworks_group = project . groups . find { |group | group . display_name == 'Frameworks' }
27- if frameworks_group == nil
28- frameworks_group = project . new_group ( 'Frameworks' )
29- end
27+ frameworks_group = project . new_group ( 'Frameworks' ) if frameworks_group == nil
3028target = project . targets . find { |target | target . to_s == target_name }
3129frameworks_build_phase = target . build_phases . find { |build_phase | build_phase . to_s == 'FrameworksBuildPhase' }
3230
3331# Add new "Embed Frameworks" build phase to target
34- embed_frameworks_build_phase = project . new ( Xcodeproj ::Project ::Object ::PBXCopyFilesBuildPhase )
35- embed_frameworks_build_phase . name = 'Embed Frameworks'
36- embed_frameworks_build_phase . symbol_dst_subfolder_spec = :frameworks
37- target . build_phases << embed_frameworks_build_phase
32+ embed_frameworks_build_phase = target . build_phases . find { |build_phase | build_phase . to_s == 'Embed Frameworks' }
33+ if embed_frameworks_build_phase == nil
34+ embed_frameworks_build_phase = project . new ( Xcodeproj ::Project ::Object ::PBXCopyFilesBuildPhase )
35+ embed_frameworks_build_phase . name = 'Embed Frameworks'
36+ embed_frameworks_build_phase . symbol_dst_subfolder_spec = :frameworks
37+ target . build_phases << embed_frameworks_build_phase
38+ end
3839
3940# Add framework search path to target
4041[ 'Debug' , 'Release' ] . each do |config |
41- paths = [ '$(inherited' , framework_root ]
42- if target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] == nil
43- target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] = paths
44- elsif target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] . kind_of? ( Array )
45- target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] << framework_root unless target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] . include? framework_root
46- else
47- paths = [ target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] , framework_root ]
48- target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] = paths
49- end
42+ paths = [ '$(inherited)' , framework_root ]
43+ framework_search_paths = target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ]
44+
45+ framework_search_paths ||= [ '$(inherited)' ]
46+ framework_search_paths = [ framework_search_paths ] unless framework_search_paths . is_a? ( Array )
47+ framework_search_paths << framework_root unless framework_search_paths . include? framework_root
48+
49+ target . build_settings ( config ) [ 'FRAMEWORK_SEARCH_PATHS' ] = framework_search_paths
5050end
5151
5252# Add framework to target as "Embedded Frameworks"
53- framework_ref = frameworks_group . new_file ( "#{ framework_root } /#{ framework_name } " )
54- build_file = embed_frameworks_build_phase . add_file_reference ( framework_ref )
55- frameworks_build_phase . add_file_reference ( framework_ref )
56- build_file . settings = { 'ATTRIBUTES' => [ 'CodeSignOnCopy' , 'RemoveHeadersOnCopy' ] }
53+ framework_ref = frameworks_group . files . find { |file_reference | file_reference . path == "#{ framework_root } /#{ framework_name } " }
54+ if framework_ref == nil
55+ framework_ref = frameworks_group . new_file ( "#{ framework_root } /#{ framework_name } " )
56+ build_file = embed_frameworks_build_phase . add_file_reference ( framework_ref )
57+ frameworks_build_phase . add_file_reference ( framework_ref )
58+ build_file . settings = { 'ATTRIBUTES' => [ 'CodeSignOnCopy' , 'RemoveHeadersOnCopy' ] }
59+ end
5760
5861#Add New Run Script Phase to Build Phases
59- phase = target . new_shell_script_build_phase ( INSTABUG_PHASE_NAME )
60- phase . shell_script = INSTABUG_PHASE_SCRIPT
62+ shell_script_build_phase = target . shell_script_build_phases . find { |build_phase | build_phase . to_s == INSTABUG_PHASE_NAME }
63+ if shell_script_build_phase == nil
64+ phase = target . new_shell_script_build_phase ( INSTABUG_PHASE_NAME )
65+ phase . shell_script = INSTABUG_PHASE_SCRIPT
66+ end
6167
6268# Save Xcode project
6369project . save
0 commit comments