Last active
August 29, 2015 14:08
-
-
Save naokits/5e202549d0fc96f3e3c6 to your computer and use it in GitHub Desktop.
XcodeプロジェクトをビルドしてIPAファイルを生成するだけのSwiftスクリプト?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/swift | |
// | |
// ipa_generator.swift | |
// | |
// Created by Naoki Tsutsui on 2014/10/29. | |
// Copyright (c) 2014年 Naoki Tsutsui All rights reserved. | |
// | |
/* | |
プロジェクト(workspaceのみに対応)ビルドし、IPAファイルを指定したディレクトリに作成します。 | |
使用方法 | |
1. このSwiftファイルを、 Xcodeプロジェクトのルートディレクトリに設置します。 | |
2. PokkeBuilderの各プロパティに適切な値をセットします。 | |
3. ターミナルで、 ./project_builder.swift を実行します。実行権が外れている場合は、chmod で実行権を付与してください。 | |
例) ./main.swift -build debug -path /path/to/your-project | |
注意事項 | |
理由はよくわかりませんが、actoolというコマンドが、Asset Catalogにある画像を生成してくれません。 | |
なので、「[email protected]」のようなファイルがアプリ内に無い状態になるのでご注意ください。 | |
引数のチェックは適当ですので、オプショナル関係でエラーが出る場合があるかもしれません。 | |
*/ | |
import Foundation | |
class PokkeBuilder { | |
let WORKSPACE_NAME = "hoge.xcworkspace" | |
let SCHEME = "hoge-dev" | |
let CONFIGURATION = "AdHocDev" | |
let TARGET_NAME = "hoge" | |
let SDK = "iphoneos8.1" | |
let PRODUCT_NAME = "hoge.app" | |
let IPA_FILE_NAME = "hoge.ipa" | |
let OUT_IPA_DIR = "OUT_IPA_DIR" | |
var projectPath: String! // プロジェクトのルートパス | |
func workspacePath() -> String { | |
return projectPath + "/" + WORKSPACE_NAME | |
} | |
func outputPath() -> String { | |
return projectPath + "/" + OUT_IPA_DIR | |
} | |
func appFilePath() -> String { | |
return self.outputPath() + "/" + PRODUCT_NAME | |
} | |
func IPAFilePath() -> String { | |
return self.outputPath() + "/" + IPA_FILE_NAME | |
} | |
func clean() { | |
let task : NSTask = NSTask() | |
task.launchPath = "/usr/bin/xcodebuild" | |
task.arguments = ["clean", "-workspace", self.workspacePath(), "-scheme", SCHEME] | |
task.standardInput = NSFileHandle.fileHandleWithNullDevice() | |
task.standardError = NSFileHandle.fileHandleWithStandardError() | |
task.standardOutput = NSFileHandle.fileHandleWithStandardOutput() | |
task.launch() | |
task.waitUntilExit() | |
} | |
func build() { | |
let task : NSTask = NSTask() | |
task.launchPath = "/usr/bin/xcodebuild" | |
task.arguments = ["-workspace", self.workspacePath(), "-scheme", SCHEME, "-sdk", SDK, "-configuration", CONFIGURATION, "CONFIGURATION_BUILD_DIR=\(self.outputPath())"] | |
task.standardInput = NSFileHandle.fileHandleWithNullDevice() | |
task.standardError = NSFileHandle.fileHandleWithStandardError() | |
task.standardOutput = NSFileHandle.fileHandleWithStandardOutput() | |
task.launch() | |
task.waitUntilExit() | |
} | |
/* | |
Create ipa File | |
*/ | |
func createIPA() { | |
let task : NSTask = NSTask() | |
task.launchPath = "/usr/bin/xcrun" | |
task.arguments = ["-sdk", SDK, "PackageApplication", self.appFilePath(), "-o", self.IPAFilePath()] | |
task.standardInput = NSFileHandle.fileHandleWithNullDevice() | |
task.standardError = NSFileHandle.fileHandleWithStandardError() | |
task.standardOutput = NSFileHandle.fileHandleWithStandardOutput() | |
task.launch() | |
task.waitUntilExit() | |
} | |
func usage() { | |
println("使用方法を表示する") | |
} | |
} | |
/////////////////////////////////////////////////////////////////////////////// | |
// Main処理 | |
/////////////////////////////////////////////////////////////////////////////// | |
let builder = PokkeBuilder() | |
let debugmode: Bool = true | |
let arguments = NSProcessInfo.processInfo().arguments as NSArray | |
let argv0 = arguments[0] as String | |
let appName = argv0.lastPathComponent | |
println("App: \(appName)") | |
// -helpが含まれている場合は、使用法を表示して終了 | |
let predicate = NSPredicate(format:"SELF beginswith '-help'", argumentArray:nil) | |
if let helpArguments = arguments.filteredArrayUsingPredicate(predicate) as? [NSString] { | |
if (helpArguments.count > 0) { | |
builder.usage() | |
exit(1) | |
} | |
} | |
var buildType: String! | |
var projectPath: String! | |
// 引数を '-' 毎に切り分けて配列に格納する | |
if let dashedArguments = (arguments as Array).filter({$0.hasPrefix("-")}) as? [NSString] { | |
for argument: NSString in dashedArguments { | |
let key = argument.substringFromIndex(1) as String | |
if let value = NSUserDefaults.standardUserDefaults().valueForKey(key) as? String { | |
if debugmode { | |
println("引数: \(argument)") | |
println("キー: \(key)") | |
println("値: \(value)") | |
} | |
if (argument == "-build") { | |
if value == "debug" { | |
println("pokke devを作成します") | |
} else if value == "production" { | |
println("pokke prodを作成します") | |
} | |
buildType = value | |
} else if argument == "-m" { | |
println("コメント: \(value)") | |
} else if argument == "-path" { | |
let path = value | |
println("\(path)") | |
projectPath = path | |
} | |
} | |
} | |
} | |
if projectPath == nil { | |
println("パスの指定は必須です") | |
} else { | |
builder.projectPath = projectPath | |
builder.clean() | |
builder.build() | |
builder.createIPA() | |
} | |
println("-------------- 終了 --------------") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
似たようなことをするシェルスクリプトは次にあります。
https://gist.github.com/naokits/691f1749afcd0d3b055f
こちらは正常にDeployGateにアップロードまでできます