Xamarin EnvVar for osx输出本机库的文件夹路径

时间:2017-10-12 11:46:01

标签: xamarin xamarin.ios msbuild

当使用直接添加到应用程序项目的本机库时,如果我们将构建操作设置为None,但设置&#34;始终复制到输出文件夹&#34;,则静态本机库似乎被复制到预期的Caches文件夹(例如:/Users/<uname>/Library/Caches/Xamarin/mtbs/builds/<app-name>/<identifier>/),然后通过${ProjectDir} env-var链接到mTouchExtraArgs。可以通过Xamarin.Apple.Sdk.targets中的步骤看到这一点。

<!-- For backwards compatibility, we also copy the None items with CopyToOutput to the root build directory in the mac --> <_NoneWithCopyToOutputDirectory Include="@(_NoneWithTargetPath)" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)' != ''" />

这包括最终的.app包中的.a文件我想这会成为一个单独的问题,但这至少可以让应用程序正常工作。

但是,如果我类似地通过nuget包MSBuild目标文件向iOS项目添加本机文件,则不会将其复制到构建缓存根文件夹(尝试将文件项类型设置为Content并且结果相同)。虽然它仍然被转移到<cache folder path>/bin/iPhone/Debug/device-builds/iphone7.2-11.0.2/文件夹(猜测作为Always copy to output标志的一部分),这是应用程序的.app似乎也在其中。

我正在寻找将此路径传递给mTouchExtraArgs的方法。

注意:问题与iPhoneSimulator不存在,因为输出路径仅为<cache folder>/bin/iPhoneSimulator/Debug,因此我只能使用${ProjectDir}/bin/$(Platform)/$(Configuration)/mylib.a,让它在模拟器中运行。它链接很好,然后按预期工作。

对于设备而言,路径的最后一部分是基于设备的动态,不知道我如何向链接器指示该值。任何帮助都会很棒。

使用Visual Studio(2017年15.3.5)和最新稳定的Xamarin.iOS(11.0),Xamarin(4.7.9.45),如果有帮助的话。

1 个答案:

答案 0 :(得分:1)

那些方向是&#34;小&#34;过时的;-)

将框架或静态/动态库添加为&#34; Native Reference&#34;并设置其mtouch/gcc_flags属性。这可以通过将框架目录或库拖放到Native Reference项目的Xamarin.iOS组中来完成。

enter image description here

然后,您可以设置库的 Kind 的属性:框架,静态或动态。

enter image description here

如果您知道现有的&#34;链接&#34;中的gcc链接选项和稍微,则其他属性相当不言自明。文档:

这将在项目中生成自定义ItemGroup / NativeReferenceXamarin.iOS MSBuild目标将被解析并转发到mtouch

来自SushiHangover.SVGKit的示例:

  <ItemGroup>
    <NativeReference Include="..\SVGKit\DerivedData\SVGKit-iOS\Build\Products\Release-universal\libSVGKit-iOS.2.0.0.a">
      <Kind>Static</Kind>
      <ForceLoad>True</ForceLoad>
      <Frameworks>CocoaLumberjack CoreText CoreImage QuartzCore CoreGraphics</Frameworks>
      <LinkerFlags>-lxml2</LinkerFlags>
    </NativeReference>
    <NativeReference Include="..\SVGKit\3rd-party-frameworks\CocoaLumberjack-2.2.0\iOS\CocoaLumberjack.framework">
      <Kind>Framework</Kind>
      <ForceLoad>True</ForceLoad>
    </NativeReference>
  </ItemGroup>

回复:https://github.com/sushihangover/SVGKit.Binding