My External Storage

Jul 26, 2017 - 3 minute read - Comments - Xamarin.Mac c-sharp VisualStudio

Xamarin.Macプロジェクトのオプションにある「追加のmmp引数」に指定できる値

TL;DR

Visual Studio for MacCocoa Appのプロジェクトをビルドするとき、「追加のmmp引数」を設定しておくと.appファイルを作成するときに詳細なオプションが渡せます。.csprojファイル内では<MonoBundlingExtraArgs>の属性です。指定できる引数は以下のコマンドで確認することが出来ます。

$ /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/bin/mmp -?
Copyright 2010 Novell Inc.
Copyright 2011-2016 Xamarin Inc.
Usage: mmp [options] application-exe
  -h, -?, --help             Displays the help
      --version              Output version information and exit.
  -f, --force                Forces the recompilation of code, regardless of
  etc...

追加のmmp引数という謎のオプション

Visual Studio for MacCocoa Appプロジェクトを作成すると、プロジェクトのプロジェクトオプションに、「Mac Build」という項目があります。このオプション一覧には「追加のmmp引数」というテキストフィールドのオプションがあるのですが、バルーンヘルプを見ても「アプリケーションバンドルツールmmpに渡される追加のコマンドライン引数」としか出てきません。バリデーションもなく、基本なんでも入力できるので、正直何に使うのかよくわかっていませんでした。

Xamarinの公式ページなどでも少し触れられている程度です。

Xamarin.Mac Internals#Enabling the Partial Static Registrar

The Partial Static Registrar is enabled in Xamarin.Mac by double-clicking the Project Name in the Solution Explorer, navigating to Mac Build and adding –registrar:static to the Additional mmp arguments: field. For example:

mmp とは

mmpXamarin.Macで作成されたC#の一連のバイナリからMacのネイティブアプリ(.app)を作る過程で呼ばれているツールです(Mac Buildオプション内で言及されているので、当然と言えば当然ですね…)。 そのmmpコマンドに引数を渡して具体的に何が出来るかというと、例えばビルド中の特定の警告を抑制(--nowarn:${WARN_NUM})したり、あるいは特定の警告をビルドエラー(--warnaserror:${WARN_NUM})扱いに出来ます。.csprojファイルで言うと、<MonoBundlingExtraArgs>属性になります。以下のような.csprojファイルの内容の場合、Debug|x64ビルド時に、警告MM0617の抑制をオプション指定したことになります。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
    ...
    <MonoBundlingExtraArgs>--nowarn:0617</MonoBundlingExtraArgs>
    ...
  </PropertyGroup>

mmpにオプション引数として指定できる値の一覧

では、どのようなオプション値が指定できるのかというと、あまりネット上には情報がありませんでした。ただ、mmpコマンド自体は-hコマンドオプションが実装されているので、ローカルのmmpコマンドを直接実行してみることで、渡せるコマンドオプションがわかります。私のMacではmmpコマンドにパスが通ってなかったので、以下のようにしてオプション一覧を確認しました。各オプションの値もある程度解説されています。

/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/bin/mmp -?
mmp - Xamarin.Mac Packer
Copyright 2010 Novell Inc.
Copyright 2011-2016 Xamarin Inc.
Usage: mmp [options] application-exe
  -h, -?, --help             Displays the help
      --version              Output version information and exit.
  -f, --force                Forces the recompilation of code,
                             regardless of timestamps
      --cache=VALUE          Specify the directory where temporary build files will be cached
  -a, --assembly=VALUE       Add an assembly to be processed
  -r, --resource=VALUE       Add a resource to be included
  -o, --output=VALUE         Specify the output path
  -n, --name=VALUE           Specify the application name
  -d, --debug                Build a debug bundle
      --nolink               Do not link the assemblies
      --mapinject            Inject a fast method map [deprecated]
      --minos=VALUE          Minimum supported version of Mac OS X
      --linksdkonly          Link only the SDK assemblies
      --linkskip=VALUE       Skip linking of the specified assembly
      --i18n=VALUE           List of i18n assemblies to copy to the output
                               directory, separated by commas (none,all,cjk,
                               mideast,other,rare,west)
    ...
    省略
    ...

      --warnaserror[=VALUE]  An optional comma-separated list of warning codes
                               that should be reported as errors (if no
                               warnings are specified all warnings are reported
                               as errors).
      --nowarn[=VALUE]       An optional comma-separated list of warning codes
                               to ignore (if no warnings are specified all
                               warnings are ignored).
    etc...