Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Are there any example build scripts for Jenkins? #96

Open
kylepark-nsuslab opened this issue Feb 8, 2024 · 1 comment
Open

Are there any example build scripts for Jenkins? #96

kylepark-nsuslab opened this issue Feb 8, 2024 · 1 comment

Comments

@kylepark-nsuslab
Copy link

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?

@kylepark-nsuslab
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant