unigunkan 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -22,6 +22,10 @@ To disable Retina 4 inch devices support,
22
22
 
23
23
  $ unigunkan /path/to/project/Unity-iPhone.xcodeproj --disable-retina-4inch-support
24
24
 
25
+ Add folder references,
26
+
27
+ $ unigunkan /path/to/project/Unity-iPhone.xcodeproj --folder-refs=../../assetbundles
28
+
25
29
  ## Contributing
26
30
 
27
31
  1. Fork it
data/bin/unigunkan CHANGED
@@ -9,6 +9,9 @@ OPTS = {}
9
9
  opt.on('-y') {|v| OPTS[:y] = v }
10
10
  opt.on('--disable-retina-4inch-support') {|v| OPTS[:disable_retina_4inch_support] = v}
11
11
  opt.on('--folder-refs VAL') {|v| OPTS[:folder_refs] = v}
12
+ opt.on('--integrate-testflight-sdk') {|v| OPTS[:integrate_testflight_sdk] = v}
13
+ opt.on('--testflight-sdk VAL') {|v| OPTS[:testflight_sdk] = v}
14
+ opt.on('--testflight-application-token VAL') {|v| OPTS[:testflight_application_token] = v}
12
15
  opt.parse!(ARGV)
13
16
 
14
17
  input = ARGV[0]
@@ -20,8 +23,6 @@ if input.nil?
20
23
  exit false
21
24
  end
22
25
 
23
- puts "Hello Uni. #{ARGV[0]}"
24
-
25
26
  input = "#{input}/project.pbxproj" if !File.exists?(input) || File::ftype(input) == "directory"
26
27
 
27
28
  if !File.exists?(input)
@@ -38,10 +39,23 @@ if backup_confirmed != true
38
39
  exit false
39
40
  end
40
41
 
42
+ if OPTS[:integrate_testflight_sdk] == true
43
+ if OPTS[:testflight_sdk] == nil || OPTS[:testflight_application_token] == nil
44
+ STDERR.puts "To integrate testflight sdk, please set params below."
45
+ STDERR.puts "--testflight-sdk /path/to/sdk"
46
+ STDERR.puts "--testflight-application-token 123456"
47
+ exit false
48
+ end
49
+ end
50
+
41
51
  processor = Unigunkan::Processor.new(input, OPTS)
42
52
  processor.create_backup
43
53
  processor.disable_retina_4inch_support if disable_retina_4inch_support
44
54
  processor.add_folder_refs
45
55
 
56
+ if OPTS[:integrate_testflight_sdk] == true
57
+ processor.integrate_testflight_sdk OPTS[:testflight_sdk], OPTS[:testflight_application_token]
58
+ end
59
+
46
60
  processor.delete_original_project_file
47
61
  processor.write
@@ -0,0 +1,15 @@
1
+ class BuildFile
2
+ attr_accessor :id
3
+
4
+ def initialize(fileref)
5
+ @id = SecureRandom.hex(12)
6
+ @fileref = fileref
7
+ end
8
+
9
+ def key
10
+ "#{@id} /* #{@fileref.name} in #{@fileref.group} */"
11
+ end
12
+ def to_s
13
+ "#{self.key} = {isa = PBXBuildFile; fileRef = #{@fileref.id} /* #{@fileref.name} */; };"
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ class FileRef
2
+ attr_accessor :id, :name, :last_known_type, :path, :source_tree, :file_encoding
3
+
4
+ def initialize(hash)
5
+ @id = SecureRandom.hex(12)
6
+ @name = hash[:name]
7
+ @last_known_type = hash[:last_known_type]
8
+ @path = hash[:path]
9
+ @source_tree = hash[:source_tree]
10
+ @file_encoding = hash[:file_encoding]
11
+ end
12
+
13
+ def fields
14
+ last_known_type = @last_known_type
15
+ last_known_type = "\"#{last_known_type}\"" if last_known_type == "compiled.mach-o.dylib"
16
+
17
+ elements = ["isa = PBXFileReference", "lastKnownType = #{last_known_type}", "name = #{@name}", "path = #{@path}", "sourceTree = #{@source_tree}"]
18
+ elements << "fileEncoding = #{@file_encoding}" if @file_encoding
19
+ elements.map{|a| "#{a};"}.join(" ")
20
+ end
21
+
22
+ def key
23
+ "#{@id} /* #{@name} */"
24
+ end
25
+
26
+ def to_s
27
+ "#{self.key} = {#{self.fields}};"
28
+ end
29
+
30
+ def group
31
+ FileRef.file_group(self.name)
32
+ end
33
+
34
+ def build_file
35
+ @build_file = BuildFile.new(self) if !@build_file
36
+ return @build_file
37
+ end
38
+
39
+ def self.file_group(filename)
40
+ ext = filename.split(".").last
41
+ case ext
42
+ when "dylib"
43
+ return "Frameworks"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ class Modifier
2
+ def self.add_build_files(src, files)
3
+ return add_block_after(src, "/* Begin PBXBuildFile section */", files)
4
+ end
5
+
6
+ def self.add_file_ref(src, files)
7
+ return add_block_after(src, "/* Begin PBXFileReference section */", files)
8
+ end
9
+
10
+ def self.add_framework_build_phase(src, files)
11
+ src_ = src
12
+ target = /Frameworks \*\/ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = (.*?);\n\t\t\tfiles = \(/
13
+ mask = src_.scan(target)[0][0]
14
+ build_phases = "Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = #{mask};\n\t\t\tfiles = (\n"
15
+ return src_.gsub(build_phases, build_phases + files + ",")
16
+ end
17
+
18
+ def self.add_file_to_tree(src, file)
19
+ target = "/* CustomTemplate */ = {
20
+ isa = PBXGroup;
21
+ children = ("
22
+ return add_block_after(src, target, file)
23
+ end
24
+
25
+ def self.add_library_search_paths(src, paths)
26
+ # TODO This won't work in non-unity projects. Fix later.
27
+ target = '$(SRCROOT)/Libraries\"",'
28
+ return add_block_after(src, target, paths)
29
+ end
30
+
31
+ def self.add_block_after(src, line, block)
32
+ src.gsub(line, line + "\n" + block)
33
+ end
34
+ end
@@ -99,6 +99,57 @@ class Unigunkan::Processor
99
99
  @src.gsub!(target, group + "\n" + entry_in_tree_to_add.join("\n"))
100
100
  end
101
101
 
102
+ def new_uuid
103
+ SecureRandom.hex(10)
104
+ end
105
+
106
+ def link_library(library, path)
107
+ case library.split(".").last
108
+ when "dylib"
109
+ fileref = FileRef.new({name: library, last_known_type: "compiled.mach-o.dylib", path: path, source_tree: :SDKROOT})
110
+ @src = Modifier.add_build_files(@src, fileref.build_file.to_s)
111
+ @src = Modifier.add_file_ref(@src, fileref.to_s)
112
+ @src = Modifier.add_framework_build_phase(@src, fileref.build_file.key)
113
+ @src = Modifier.add_file_to_tree(@src, fileref.key + ",")
114
+ when "a"
115
+ fileref = FileRef.new({name: library, last_known_type: "archive.ar", path: "#{path}/#{library}", source_tree: "\"<group>\""})
116
+ @src = Modifier.add_build_files(@src, fileref.build_file.to_s)
117
+ @src = Modifier.add_file_ref(@src, fileref.to_s)
118
+ @src = Modifier.add_framework_build_phase(@src, fileref.build_file.key)
119
+ @src = Modifier.add_library_search_paths(@src, "\"\\\"#{path}\\\"\",")
120
+ @src = Modifier.add_file_to_tree(@src, fileref.key + ",")
121
+ else
122
+ puts "Unsupported: #{library}"
123
+ end
124
+ end
125
+
126
+ def add_header(file, path)
127
+ fileref = FileRef.new({name: file, last_known_type: "sourcecode.c.h", path: "#{path}/#{file}", source_tree: "\"<absolute>\"", file_encoding: 4})
128
+ @src = Modifier.add_file_ref(@src, fileref.to_s)
129
+ @src = Modifier.add_file_to_tree(@src, fileref.key + ",")
130
+ end
131
+
132
+ def integrate_testflight_sdk(sdk_path, token)
133
+ puts "Integrate TestFlight SDK #{sdk_path}, #{token}"
134
+ link_library "libz.dylib", "usr/lib/libz.dylib"
135
+ link_library "libTestFlight.a", sdk_path
136
+ add_header "TestFlight.h", sdk_path
137
+
138
+ # Import TestFlight.h in the precompiled header
139
+ pch_file = File.expand_path(@proj_file + "/../../Classes/iPhone_target_Prefix.pch")
140
+ pch = File.read(pch_file)
141
+ pch.gsub!("#ifdef __OBJC__","#ifdef __OBJC__\n#import \"TestFlight.h\"")
142
+ File.write(pch_file, pch)
143
+
144
+ # Insert some codes in AppController
145
+ app_controller_file = File.expand_path(@proj_file + "/../../Classes/AppController.mm")
146
+ app_controller = File.read(app_controller_file)
147
+ target = "- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions\n{"
148
+
149
+ app_controller.gsub!(target, target + "\n[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];[TestFlight takeOff:@\"#{token}\"];")
150
+ File.write(app_controller_file, app_controller)
151
+ end
152
+
102
153
  def add_block_after(line, block)
103
154
  @src.gsub!(line, line + "\n" + block)
104
155
  end
@@ -1,3 +1,3 @@
1
1
  module Unigunkan
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/lib/unigunkan.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require "unigunkan/version"
2
2
  require "unigunkan/processor"
3
+ require "unigunkan/modifier"
4
+ require "unigunkan/fileref"
5
+ require "unigunkan/buildfile"
3
6
 
4
7
  module Unigunkan
5
8
  # Your code goes here...
@@ -0,0 +1,33 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('spec_helper'), File.dirname(__FILE__))
3
+
4
+ describe FileRef do
5
+ it "should be created from a hash" do
6
+ name = "libz.dylib"
7
+ path = "usr/lib/libz.dylib"
8
+ last_known_type = "compiled.mach-o.dylib"
9
+ ref = FileRef.new({name: name, last_known_type: last_known_type, path: path, source_tree: :SDKROOT})
10
+ ref.id.should_not be_nil
11
+ ref.name.should == name
12
+ ref.path.should == path
13
+ ref.last_known_type.should == last_known_type
14
+
15
+ puts ref.to_s
16
+ end
17
+
18
+ it "should detect group correctly" do
19
+ FileRef.file_group("abc.dylib").should == "Frameworks"
20
+ end
21
+ end
22
+
23
+ describe BuildFile do
24
+ it "should be created from fileref" do
25
+ name = "libz.dylib"
26
+ path = "usr/lib/libz.dylib"
27
+ last_known_type = "compiled.mach-o.dylib"
28
+ ref = FileRef.new({name: name, last_known_type: last_known_type, path: path, source_tree: :SDKROOT})
29
+
30
+ file = BuildFile.new(ref)
31
+ puts file
32
+ end
33
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('spec_helper'), File.dirname(__FILE__))
3
+
4
+ describe Modifier do
5
+
6
+ src = <<EOS
7
+ // !$*UTF8*$!
8
+ {
9
+ archiveVersion = 1;
10
+ classes = {
11
+ };
12
+ objectVersion = 46;
13
+ objects = {
14
+
15
+ /* Begin PBXBuildFile section */
16
+ 1900A7F415A6DCB500DDA291 /* AFHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900A7E015A6DCB500DDA291 /* AFHTTPClient.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
17
+ 1900A7F515A6DCB500DDA291 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900A7E215A6DCB500DDA291 /* AFHTTPRequestOperation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
18
+ 1900A7F615A6DCB500DDA291 /* AFImageRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900A7E415A6DCB500DDA291 /* AFImageRequestOperation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
19
+ 1900A7F715A6DCB500DDA291 /* AFJSONRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900A7E615A6DCB500DDA291 /* AFJSONRequestOperation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
20
+ 1900A7F815A6DCB500DDA291 /* AFJSONUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900A7E815A6DCB500DDA291 /* AFJSONUtilities.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
21
+ /* End PBXBuildFile section */
22
+
23
+ /* Begin PBXFileReference section */
24
+ 19C7BC9D1679ECA000282DD7 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/SYViewController.xib; sourceTree = "<group>"; };
25
+ 19C7BCA41679ECAE00282DD7 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
26
+
27
+ /* Begin PBXFrameworksBuildPhase section */
28
+ 19C7BC7A1679ECA000282DD7 /* Frameworks */ = {
29
+ isa = PBXFrameworksBuildPhase;
30
+ buildActionMask = 2147483647;
31
+ files = (
32
+ 19C7BC821679ECA000282DD7 /* UIKit.framework in Frameworks */,
33
+ 19C7BC841679ECA000282DD7 /* Foundation.framework in Frameworks */,
34
+ 19C7BC861679ECA000282DD7 /* CoreGraphics.framework in Frameworks */,
35
+ );
36
+ runOnlyForDeploymentPostprocessing = 0;
37
+ };
38
+ /* End PBXFrameworksBuildPhase section */
39
+ EOS
40
+
41
+
42
+ it "should add buildfile" do
43
+ ret = Modifier.add_build_files(src, "[buildfile]")
44
+ expected = <<EOS
45
+ /* Begin PBXBuildFile section */
46
+ [buildfile]
47
+ EOS
48
+ ret.index(expected).should_not be_nil
49
+ end
50
+
51
+ it "should add fileref" do
52
+ ret = Modifier.add_file_ref(src, "[fileref]")
53
+ expected = <<EOS
54
+ /* Begin PBXFileReference section */
55
+ [fileref]
56
+ EOS
57
+ ret.index(expected).should_not be_nil
58
+ end
59
+
60
+ it "should add framework build phase" do
61
+ ret = Modifier.add_framework_build_phase(src, "[framework]")
62
+ expected = <<EOS
63
+ isa = PBXFrameworksBuildPhase;
64
+ buildActionMask = 2147483647;
65
+ files = (
66
+ [framework]
67
+ EOS
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+ require 'rubygems'
3
+ require 'unigunkan'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unigunkan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-18 00:00:00.000000000 Z
12
+ date: 2012-12-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Designed for Unity based projects.
15
15
  email:
@@ -26,8 +26,14 @@ files:
26
26
  - Rakefile
27
27
  - bin/unigunkan
28
28
  - lib/unigunkan.rb
29
+ - lib/unigunkan/buildfile.rb
30
+ - lib/unigunkan/fileref.rb
31
+ - lib/unigunkan/modifier.rb
29
32
  - lib/unigunkan/processor.rb
30
33
  - lib/unigunkan/version.rb
34
+ - spec/models_spec.rb
35
+ - spec/project_spec.rb
36
+ - spec/spec_helper.rb
31
37
  - unigunkan.gemspec
32
38
  homepage: http://github.com/yokoe/unigunkan
33
39
  licenses: []
@@ -49,8 +55,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
55
  version: '0'
50
56
  requirements: []
51
57
  rubyforge_project:
52
- rubygems_version: 1.8.23
58
+ rubygems_version: 1.8.24
53
59
  signing_key:
54
60
  specification_version: 3
55
61
  summary: A command line xcode project file modifier.
56
- test_files: []
62
+ test_files:
63
+ - spec/models_spec.rb
64
+ - spec/project_spec.rb
65
+ - spec/spec_helper.rb