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

3
我想知道构建一个包含xib文件的MonoTouch C#应用程序的完整步骤,以及一组库程序集,这些库程序集也可能包含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) 编译接口定义:在每个程序集中运行ibtool,对每个xib文件进行编译,例如:

/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个回答

3
您可以从终端窗口或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的更大集成过程的一部分。 - bright
1
只是为了确保上面的评论清晰明了:Monotouch在正常开发中使用.csproj文件,但不通过msbuild/xbuild运行它。相反,它只解析它所能理解的部分,而忽略其余部分。结果是当我们试图扩展构建过程时,会出现不可预测的混乱 - csproj文件根本不被尊重。我们正在尝试做的是Monotouch计划在“将来某个时候”完成的事情 - 一个真正的MSBuild环境,可以成为更大工作流程的一部分。 - bright
1
这是目前唯一一个完整的步骤集,允许您在MonoDevelop IDE之外(在命令行上)构建任何MonoTouch应用程序。 mtouch工具有一些选项(例如清单和签名),可以在MD之外使用(即使MD使用自己的代码),但这并不涵盖MD插件执行的每个步骤(某些步骤仅在特定情况下发生)。 - poupou
1
你不能创建一个调用mdtool的MSBuild脚本吗? - Rolf Bjarne Kvinge
结合回复,最好的方法似乎是:1)从解决方案中调用的已签入的.csproj文件是“真实”的msbuild脚本,并在“实验性”的msbuild / xbuild模式下运行。2)其中每个动态生成符合mdtool限制的.csproj文件,然后3)运行生成的文件上的mdtool。绕了一圈,但可能可以变得可靠。会发布这个结果。接受poupou的答案,因为这启发了这种思路。谢谢! - bright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接