Class: Luna::Binary::Build

Inherits:
Object
  • Object
show all
Defined in:
lib/luna/binary/build.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBuild

Returns a new instance of Build.



14
15
16
# File 'lib/luna/binary/build.rb', line 14

def initialize
    
end

Instance Attribute Details

#schemeObject

Returns the value of attribute scheme.



13
14
15
# File 'lib/luna/binary/build.rb', line 13

def scheme
  @scheme
end

#workspaceObject

Returns the value of attribute workspace.



12
13
14
# File 'lib/luna/binary/build.rb', line 12

def workspace
  @workspace
end

Instance Method Details

#binary_path_armObject



104
105
106
# File 'lib/luna/binary/build.rb', line 104

def binary_path_arm
    return Common.instance.binary_path_arm
end

#binary_path_mergedObject



100
101
102
# File 'lib/luna/binary/build.rb', line 100

def binary_path_merged
    return Common.instance.binary_path_merged
end

#binary_path_x86Object



108
109
110
# File 'lib/luna/binary/build.rb', line 108

def binary_path_x86
    return Common.instance.binary_path_x86
end

#command(c) ⇒ Object



22
23
24
# File 'lib/luna/binary/build.rb', line 22

def command(c)
    return Common.instance.command(c)
end

#createFrameworksObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/luna/binary/build.rb', line 26

def createFrameworks
    isNext = true
    puts "请将二进制开关关闭,确保每个模块都是源码运行,因为二进制的因素有可能source缓存还是会引入二进制".yellow
    Install.new(false)
    Common.instance.deleteDirectory(binary_path_arm)
    tempLunaUploaderPath = Common.instance.tempLunaUploaderPath
    isNext = command("xcodebuild -workspace #{workspace} -scheme #{scheme} -configuration Debug -derivedDataPath '#{tempLunaUploaderPath}/build/arm/temp'") if isNext == true
    isNext = command("cp -r #{tempLunaUploaderPath}/build/arm/temp/Build/Products/Debug-iphoneos #{binary_path_arm}") if isNext == true #本可以用CONFIGURATION_BUILD_DIR直接指定结果文件夹,结果经常性的编译报错
    Common.instance.deleteDirectory(binary_path_x86)
    isNext = command("xcodebuild -workspace #{workspace} -scheme #{scheme} -configuration Debug -derivedDataPath '#{tempLunaUploaderPath}/build/x86/temp' -destination 'platform=iOS Simulator,name=iPhone 11'") if isNext == true
    isNext = command("cp -r #{tempLunaUploaderPath}/build/x86/temp/Build/Products/Debug-iphonesimulator #{binary_path_x86}") if isNext == true
    mergeFrameWorks(binary_path_arm, binary_path_x86) if isNext == true
    return isNext
end

#findFramework(moduleName, binary_path) ⇒ Object



90
91
92
93
94
95
96
97
# File 'lib/luna/binary/build.rb', line 90

def findFramework(moduleName, binary_path)
    pathArr = Dir.glob("#{binary_path}/**/#{moduleName.sub('-', '_')}.framework")
    if pathArr != nil
        return pathArr.first
    else
        return nil
    end
end

#lockfileObject



75
76
77
# File 'lib/luna/binary/build.rb', line 75

def lockfile
    return Common.instance.lockfile
end

#mergeFrameWork(moduleName, path1, path2) ⇒ Object



84
85
86
87
88
# File 'lib/luna/binary/build.rb', line 84

def mergeFrameWork(moduleName, path1, path2)
    command("mkdir -p #{binary_path_merged}; cp -r #{File.dirname(path1)} #{binary_path_merged}; cp -r #{File.dirname(path2)} #{binary_path_merged}; mv #{binary_path_merged}/#{File.basename(File.dirname(path1))} #{binary_path_merged}/#{moduleName};")
    framework_name = moduleName.gsub("-", "_")
    return command("lipo -create #{path2}/#{framework_name} #{path1}/#{framework_name} -output #{binary_path_merged}/#{moduleName}/#{framework_name}.framework/#{framework_name}")
end

#mergeFrameWorks(binary_path_arm, binary_path_x86) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/luna/binary/build.rb', line 41

def mergeFrameWorks(binary_path_arm, binary_path_x86)
    Common.instance.deleteDirectory(binary_path_merged)
    dedupingMapper = {}
    failList = []
    p lockfile.pod_names
    lockfile.pod_names.each { |i|
        item = i.split("/").first
        if dedupingMapper[item] == nil
            begin
                puts item.yellow
                armPath = findFramework(item,binary_path_arm)
                x86Path = findFramework(item,binary_path_x86)

                is_merge = mergeFrameWork(item, armPath, x86Path) if armPath != nil && x86Path != nil
                trasher_path = "#{Common.instance.tempLunaUploaderPath}/trasher"
                failList << "#{item} 存在问题,已搬到#{trasher_path}" if is_merge == false
                command("mkdir #{trasher_path}; mv #{binary_path_merged}/#{item} #{trasher_path}") if is_merge == false
                dedupingMapper[item] = item
            rescue => exception
                failList << "#{item} exception : #{exception}"
            ensure
                
            end
           
        end 
    }
    
    puts "合并后的framework的路径为:#{binary_path_merged}".green
    puts "-=-=-=-=-=-=-=-=merge 失败名单-=-=-=-=-=-=-=-=-=-=" if failList.length > 0
    failList.each { |item|
        puts item.red
    }
end

#runObject



18
19
20
# File 'lib/luna/binary/build.rb', line 18

def run 
    return createFrameworks
end

#xcodeSimulatorsObject



79
80
81
82
# File 'lib/luna/binary/build.rb', line 79

def xcodeSimulators
    # simulators = JSON.parse(%x("xcodebuild -workspace #{workspace} -scheme #{scheme} -showdestinations"))  
    
end