打包所需要的参数:
Build Mode
xcworkspace、xcodeproj
Code Sign Identity security
命令行 find-identity -v -p codesigning 参考链接
API Token
从 fir.im 获取用户标识
Project Root Path
手动浏览文件获取工程路径
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
NSArray *fileTypes = [NSArray arrayWithObjects:@"xcworkspace", @"xcodeproj", nil];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setMessage:@"Choose an project file to display:"];
[openPanel setAllowedFileTypes:fileTypes];
[openPanel setDirectoryURL:[NSURL fileURLWithPath:@"/Library/Desktop/"]];
[openPanel beginSheetModalForWindow:viewController.view.window completionHandler:^(NSInteger result) {
if (result == NSModalResponseOK)
{
if ([[openPanel URL] isFileURL])
{
}
}
}];
Provisioning Profile
- 到 ~/Library/MobileDevice/Provisioning Profiles/ 路径下查看所有以 UUID 命名的描述文件。
- 命令行 mobileprovision-read -f UUID.mobileprovision -o Name 查询对应描述文件的名字。
NSTask
在工程项目中执行命令行
// 初始化 NSTask
self.executePyTask = [[NSTask alloc]init];
// 当前执行的路径,相当于 cd 到指定路径。
self.executePyTask.currentDirectoryPath = [NSBundle mainBundle].resourcePath;
// 二进制程序的路径。 如果不清楚命令的路径可以在终端运行,以 python 为例:which python,查看所属路径。
self.executePyTask.launchPath = @"/usr/bin/python";
// 分配参数,每一个参数作为数组中的一个元素
self.executePyTask.arguments = @[@"GKAutoBuild.py", @"-b", b, @"-a", a, @"-c", c,@"-p", p, @"-m", m, @"-n", n,@"-f",[NSString stringWithFormat:@"%@.%@",n,b]];
// 输出通道初始化(提供执行结果)
NSPipe *pipe = [NSPipe pipe];
self.executePyTask.standardOutput = pipe;
self.outPutHandle = [pipe fileHandleForReading];
// 实时监听输出结果
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifi_outPutFileReadProcess:) name:NSFileHandleReadCompletionNotification object:self.outPutHandle];
// 监听是否完成任务
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifi_executePyTaskDidTerminate:) name:NSTaskDidTerminateNotification object:self.executePyTask];
// 开启任务
[self.executePyTask launch];
// 调用这个方法通知才有效
[self.outPutHandle readInBackgroundAndNotify];
- (void)notifi_outPutFileReadProcess:(NSNotification *)notified
{
if(self.executePyTask){
// 任务未完成之前每发送一次通知之后,需要重新调用该方法,使通知有效
[self.outPutHandle readInBackgroundAndNotify];
}
}
- (void)notifi_executePyTaskDidTerminate:(NSNotification *)notified
{
// 任务完成将 task 置空,防止重复调用 notifi_outPutFileReadProcess:
self.executePyTask = nil;
}
Mac OS
NSTextView
// 设置输出窗口内容
NSTextStorage *ts = [outPutTextView textStorage];
// NSTextView 插入字符串
// [outPutTextView insertText:(nonnull id) replacementRange:(NSRange)];
[ts replaceCharactersInRange:NSMakeRange([ts length], 0)
withString:outPutString];
// 滚动到最后一行
[outPutTextView scrollRangeToVisible:NSMakeRange([[outPutTextView string] length], 0)];
Python
对 Python 脚本传参数
对于全局变量需要使用 global
var = "2"
def main():
gobal var
var = "1"
其他问题:
对类名进行重名的时候发生错误:
解决方法 : 在 .h 文件的 @interface 定义前加上 @class classname; 就可以完成重命名。