从命令行完全构建 Monotouch 应用程序包的完整步骤是啥?

Posted

技术标签:

【中文标题】从命令行完全构建 Monotouch 应用程序包的完整步骤是啥?【英文标题】:What are the complete set of steps to fully build a Monotouch app bundle from the command line?从命令行完全构建 Monotouch 应用程序包的完整步骤是什么? 【发布时间】:2012-02-22 13:19:42 【问题描述】:

我想知道构建 MonoTouch C# 应用程序的完整步骤是什么,该应用程序由包含 xib 文件的主应用程序程序集和一组也可能包含 xib 文件的库程序集组成。

出于各种原因,我们正试图通过适当的 MSBuild 脚本(MonoTouch 尚不支持)自动执行这些步骤,这里我将重点讨论这个问题。

到目前为止,这是我想出的:

1) 使用 smcs 编译每个程序集,例如

/Developer/MonoTouch/usr/bin/smcs /noconfig 
"/out:/Users/bright/src/MonoTouchAppWithLib/AppLib/bin/Debug/AppLib.dll
"/r:/Developer/MonoTouch/usr/lib/mono/2.1/System.dll"
"/r:/Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll"
"/r:/Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll"
"/r:/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll"
/nologo /warn:4 /debug:+ /debug:full /optimize- /codepage:utf8 
"/define:DEBUG"
/t:library "/Users/bright/src/MonoTouchAppWithLib/AppLib/Class1.cs"

2) 编译接口定义:在每个程序集中的每个xib文件上运行ibtool,例如

/Developer/usr/bin/ibtool 
--errors --warnings --notices --output-format human-readable-text    
"/Users/bright/src/App/App/ViewController_iPhone.xib" 
--compile "/Users/bright/src/App/App/bin/Debug/App.app/ViewController_iPhone.nib"
--sdk "/Developer/Platforms/iPhoneSimulator.platform/Developer/
SDKs/iPhoneSimulator4.3.sdk"

3) 编译为本机代码:

/Developer/MonoTouch/usr/bin/mtouch 
-sdkroot "/Applications/Xcode.app/Contents/Developer" 
-v --nomanifest --nosign -sim
"/Users/bright/src/App/App/bin/iPhoneSimulator/Debug/App.app" 
-r "/Users/bright/src/App/AppLib/bin/Debug/AppLib.dll" 
-r "/Developer/MonoTouch/usr/lib/mono/2.1/System.dll" 
-r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll" 
-r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll" 
-r "/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll" 
-debug -profiling -nolink -sdk "5.0"
"/Users/bright/src/App/App/bin/iPhoneSimulator/Debug/App.exe"

但是,目前尚不清楚如何执行以下操作(取自 MonoDevelop 的构建输出窗口)以及执行顺序:

1) 提取嵌入内容。 MonoDevelop 只是输出这个:

Extracted HelloWorldScreen_iPhone.nib from MtLib.dll
Extracted HelloWorldScreen_iPad.nib from MtLib.dll

2) 更新应用程序清单:MonoDevelop 构建输出窗口中没有给出命令行。

3) 更新调试配置文件:MonoDevelop 构建输出窗口中没有给出命令行。

4) 更新调试设置文件:MonoDevelop 构建输出窗口中没有给出命令行。

还有我尚未完成的其他步骤,例如应用签名和资源。

希望我们可以在这里获得足够的信息来进行尝试。

【问题讨论】:

【参考方案1】:

您可以从终端窗口或从 MSBuild 任务中运行 MonoDevelop 提供的 /Applications/MonoDevelop.app/Contents/MacOS/mdtool 工具。例如

/Applications/MonoDevelop.app/Contents/MacOS/mdtool -v build -t:Build "-c:Debug|iPhoneSimulator" /path/to/your/app.csproj

这将构建 MonoTouch 应用程序,包括上述所有步骤以及将添加的任何未来功能。

【讨论】:

不,这不是我问的。我需要创建一个运行实际步骤的 MSBuild 脚本。换句话说,我需要让 MonoDevelop 在“实验性”msbuild/xbuild 设置中工作,而这从未奏效。这是与 msbuild 的更大集成过程的一部分。 只是为了确保上面的注释清楚:Monotouch 使用 .csproj 文件进行正常开发,但不通过 msbuild/xbuild 运行它。相反,它只是解析它可以解析的内容并留下其余部分。当尝试扩展构建过程时,结果是不可预知的混乱 - csproj 根本不被尊重。我们正在尝试做的是 Monotouch 计划在“未来某个时候”做的事情——一个真正的 MSBuild 环境,可以成为更大工作流程的一部分。 这是目前唯一的完整步骤集,可让您在 MonoDevelop IDE 之外构建任何 MonoTouch 应用程序(在命令行上)。 mtouch 工具有一些选项(例如清单和签名)可在 MD 之外使用(即使 MD 使用它自己的代码),但并不涵盖 MD 插件所做的每个步骤(有些仅在特定情况下才会发生)。 你不能只创建一个调用 mdtool 的 MSBuild 脚本吗? 结合响应,最好的方法似乎是:1)从解决方案中调用的签入 .csproj 文件是“真实的”msbuild 脚本并在“实验性”msbuild/ 中运行xbuild 模式。 2) 其中每一个都动态生成一个符合 mdtool 限制的 .csproj 文件,并且 3) 然后在生成的文件上运行 mdtool。回旋处,但可能会变得可靠。将发布结果如何。接受 poupou 的回答,因为这开始了这种思路。谢谢!

以上是关于从命令行完全构建 Monotouch 应用程序包的完整步骤是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从命令行自动执行 iOS monotouch GUI 测试

MonoTouch 应用程序构建

Monotouch / Xamarin 更改 iPad 应用程序的表格行高

从命令行添加Nuget对VS项目包的引用

Monotouch 或 Titanium 用于在 iPhone 上进行快速应用程序开发?

Phonegap、Corona 或 Monotouch 是不是可以在 iOS 上进行位置感知通知?