react-native-unity
react-native-unity copied to clipboard
Are there any example build scripts for Jenkins?
I'm trying to set up a build using Jenkins, but it seems difficult to script because iOS builds typically rely on Xcode. Do you have any examples of build scripts?
This is a build script that I've created. There were some limitations with Unity Build Post Script, so I decided to try making it with a Ruby script instead. Please let me know if there's a better way.
require 'xcodeproj'
class ChangeDataFolderTarget
def initialize(project_path, source_target_name, final_target_name, folder_name)
@project_path = project_path
@source_target_name = source_target_name
@final_target_name = final_target_name
@folder_name = folder_name
end
def modify_xcode_project
puts "Opening Xcode project: #{@project_path}"
# Open Xcode Project file
project = Xcodeproj::Project.open(@project_path)
# add Data folder to Final target
final_target = project.targets.find { |target| target.name == @final_target_name }
source_target = project.targets.find { |target| target.name == @source_target_name }
if final_target && source_target
# add files from Data folder to Final target
source_target.resources_build_phase.files.each do |pbx_build_file|
path = pbx_build_file.display_name.to_s
if path.include?(@folder_name)
# add files from Data folder to Final target
puts "Adding files from Folder: #{@folder_name} to Target: #{@final_target_name}"
final_target.add_file_references([pbx_build_file.file_ref])
# source target remove file reference
source_target.resources_build_phase.remove_file_reference(pbx_build_file.file_ref)
end
end
else
puts "Error: Target not found - #{@source_target_name} or #{@final_target_name}"
end
project.save
end
end
class ChangePublicNativeCallProxy
def initialize(project_path, target_name, file_path)
@project_path = project_path
@target_name = target_name
@file_path = file_path
end
def modify_xcode_project
puts "Opening Xcode project: #{@project_path}"
# Open Xcode Project file
project = Xcodeproj::Project.open(@project_path)
# Find UnityFramework target
unity_framework = project.targets.find { |target| target.name == @target_name }
if unity_framework
native_call_proxy_file = unity_framework.headers_build_phase.files_references.find do |pbx_build_file|
File.basename(pbx_build_file.path) == File.basename(@file_path)
end
if native_call_proxy_file
build_file = unity_framework.headers_build_phase.files.find do |file|
file.file_ref == native_call_proxy_file
end
if build_file
puts "Setting Target Membership to public for file: #{@file_path} in Target: #{@target_name}"
build_file.settings ||= {}
build_file.settings['ATTRIBUTES'] ||= []
build_file.settings['ATTRIBUTES'] << 'Public'
else
puts "build_file is null"
end
else
puts "native_call_proxy_file cannot found"
end
else
puts "unity_framework is null"
end
project.save
end
end
# Process for Data Folder
project_modifier = ChangeDataFolderTarget.new('./OutDir/iOS/Unity-iPhone.xcodeproj', 'Unity-iPhone', 'UnityFramework', 'Data')
project_modifier.modify_xcode_project
# Process for NativeCallProxy.h
project_modifier = ChangePublicNativeCallProxy.new('./OutDir/iOS/Unity-iPhone.xcodeproj', 'UnityFramework', 'Libraries/Plugins/iOS/NativeCallProxy.h')
project_modifier.modify_xcode_project