[msbuild] Don't put gcc/linker flags in the response file, since Mono.Options doesn't support escaping quotes. Fixes vsts#649776. (#4495)

Mono.Options doesn't (yet) support escaped quotes when parsing response files,
which becomes a problem because escaped quotes are necessary when passing
paths with spaces as gcc/linker flags.

So don't write gcc/linker flags in the response file, and instead pass them as
normal command line arguments, and to be on the safe side, do the same thing
for all extra arguments passed to mmp/mtouch.

Also add tests.

Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/649776.
This commit is contained in:
Rolf Bjarne Kvinge 2018-07-24 19:49:33 +02:00 коммит произвёл GitHub
Родитель 08a9bdcc18
Коммит 26b500ab27
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
51 изменённых файлов: 635 добавлений и 22 удалений

Просмотреть файл

@ -20,7 +20,7 @@ MSBUILD_DIRECTORIES =
MSBUILD_SYMLINKS =
MSBUILD_TASK_ASSEMBLIES =
ALL_SOURCES = $(wildcard $(TOP)/msbuild/*/*.cs) $(wildcard $(TOP)/msbuild/*/*/*.cs) $(wildcard $(TOP)/msbuild/*/*/*/*.cs) *.sln $(wildcard */*.csproj) $(wildcard */packages.config)
ALL_SOURCES:= $(shell git ls-files | sed 's/ /\\ /g')
CONFIG = Debug
##

Просмотреть файл

@ -102,6 +102,7 @@ namespace Xamarin.Mac.Tasks
protected override string GenerateCommandLineCommands ()
{
var args = new CommandLineArgumentBuilder ();
var actualArgs = new CommandLineArgumentBuilder ();
bool msym;
args.AddLine ("/verbose");
@ -203,7 +204,7 @@ namespace Xamarin.Mac.Tasks
}
if (!string.IsNullOrWhiteSpace (ExtraArguments))
args.AddLine (ExtraArguments);
actualArgs.Add (ExtraArguments);
if (NativeReferences != null) {
foreach (var nr in NativeReferences)
@ -237,10 +238,9 @@ namespace Xamarin.Mac.Tasks
}
// Use only the response file
args = new CommandLineArgumentBuilder ();
args.AddQuotedLine ($"@{responseFile}");
actualArgs.AddQuoted ($"@{responseFile}");
return args.ToString ();
return actualArgs.ToString ();
}
string GetMonoBundleDirName ()

Просмотреть файл

@ -360,6 +360,7 @@ namespace Xamarin.iOS.Tasks
protected override string GenerateCommandLineCommands ()
{
var args = new CommandLineArgumentBuilder ();
var actualArgs = new CommandLineArgumentBuilder ();
TargetArchitecture architectures;
bool msym;
@ -560,7 +561,7 @@ namespace Xamarin.iOS.Tasks
}
} else {
// other user-defined mtouch arguments
args.AddQuotedLine (StringParserService.Parse (argument, customTags));
actualArgs.AddQuoted (StringParserService.Parse (argument, customTags));
}
}
}
@ -578,7 +579,7 @@ namespace Xamarin.iOS.Tasks
args.AddLine ("--cxx");
if (gcc.Arguments.Length > 0)
args.AddQuotedLine ($"--gcc_flags={gcc.Arguments.ToString ()}");
actualArgs.AddQuoted ($"--gcc_flags={gcc.Arguments.ToString ()}");
foreach (var asm in References) {
if (IsFrameworkItem(asm)) {
@ -618,10 +619,9 @@ namespace Xamarin.iOS.Tasks
}
// Use only the response file
args = new CommandLineArgumentBuilder ();
args.AddQuoted ($"@{responseFile}");
actualArgs.AddQuoted ($"@{responseFile}");
return args.ToString ();
return actualArgs.ToString ();
}
static bool IsFrameworkItem (ITaskItem item)

Просмотреть файл

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;
namespace MySpacedApp
{
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
// class-level declarations
public override UIWindow Window {
get;
set;
}
// This method is invoked when the application is about to move from active to inactive state.
// OpenGL applications should use this method to pause.
public override void OnResignActivation (UIApplication application)
{
}
// This method should be used to release shared resources and it should store the application state.
// If your application supports background exection this method is called instead of WillTerminate
// when the user quits.
public override void DidEnterBackground (UIApplication application)
{
}
/// This method is called as part of the transiton from background to active state.
public override void WillEnterForeground (UIApplication application)
{
}
/// This method is called when the application is about to terminate. Save data, if needed.
public override void WillTerminate (UIApplication application)
{
}
}
}

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>

Просмотреть файл

@ -0,0 +1 @@
BundleResource

Просмотреть файл

@ -0,0 +1 @@
Content

Просмотреть файл

@ -0,0 +1 @@
EmbeddedResource

Просмотреть файл

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4469" systemVersion="13A476u" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3694" />
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" />
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder" />
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="568" />
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" />
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite" />
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" />
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4" />
</view>
</objects>
</document>

Просмотреть файл

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIMainStoryboardFile</key>
<string>MainStoryboard</string>
<key>MinimumOSVersion</key>
<string>7.0</string>
<key>CFBundleDisplayName</key>
<string>ApplicationName</string>
<key>CFBundleIdentifier</key>
<string>com.your-company.mysingleview</string>
<key>XSAppIconAssets</key>
<string>Resources/Images.xcassets/AppIcons.appiconset</string>
<key>XSLaunchImageAssets</key>
<string>Resources/Images.xcassets/LaunchImage.launchimage</string>
</dict>
</plist>

Просмотреть файл

@ -0,0 +1 @@
Linked Bundle Resource

Просмотреть файл

@ -0,0 +1 @@
Linked Content

Просмотреть файл

@ -0,0 +1 @@
Linked embedded resource

Просмотреть файл

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;
namespace MySpacedApp
{
public class Application
{
// This is the main entry point of the application.
static void Main (string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main (args, null, "AppDelegate");
}
}
}

Просмотреть файл

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="1.0" toolsVersion="1938" systemVersion="11C74" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="1">
<dependencies>
<development defaultVersion="4200" identifier="xcode"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="933"/>
</dependencies>
<scenes>
<scene sceneID="0">
<objects>
<viewController id="1" sceneMemberID="viewController" customClass="">
<view key="view" contentMode="scaleToFill" id="2">
<rect key="frame" x="0.0" y="20" width="320" height="460"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="5">
<rect key="frame" x="124" y="81" width="72" height="37"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Button">
<color key="titleColor" red="0.196078" green="0.3098" blue="0.52157" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
</subviews>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="3" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-313" y="-220"/>
</scene>
</scenes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination"/>
</simulatedMetricsContainer>
<resources/>
</document>

Просмотреть файл

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{CD172548-2120-4FDA-9323-534F7EB019E3}</ProjectGuid>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Exe</OutputType>
<RootNamespace>MySpacedApp</RootNamespace>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
<AssemblyName>MySpacedApp</AssemblyName>
<TargetFrameworkIdentifier>Xamarin.iOS</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v1.0</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchLink>None</MtouchLink>
<ConsolePause>false</ConsolePause>
<MtouchDebug>true</MtouchDebug>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchLink>None</MtouchLink>
<ConsolePause>false</ConsolePause>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhone\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchDebug>true</MtouchDebug>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARMv7</MtouchArch>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodesignKey>iPhone Developer</CodesignKey>
<ConsolePause>false</ConsolePause>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARMv7, ARM64</MtouchArch>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
<Folder Include="Folder\" />
<Folder Include="Resources\Archer\" />
<Folder Include="Resources\Archer\Archer_Attack.atlas\" />
<Folder Include="en.lproj\" />
</ItemGroup>
<ItemGroup>
<NativeReference Include="..\..\..\tests\test-libraries\.libs\ios\libtest2.a">
<Kind>Static</Kind>
<Link>libtest2.a</Link>
</NativeReference>
</ItemGroup>
<ItemGroup>
<None Include="Info.plist" />
<None Include="Entitlements.plist" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />
<Compile Include="MySpacedAppViewController.cs" />
<Compile Include="MySpacedAppViewController.designer.cs">
<DependentUpon>MySpacedAppViewController.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<BundleResource Include="LinkedBundleResource.txt">
<Link>Folder\LinkedBundleResource.txt</Link>
</BundleResource>
<BundleResource Include="Folder\BundleResource.txt" />
<BundleResource Include="Resources\image.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LinkedEmbeddedResource.txt">
<Link>Folder\LinkedEmbeddedResource.txt</Link>
</EmbeddedResource>
<EmbeddedResource Include="Folder\EmbeddedResource.txt" />
</ItemGroup>
<ItemGroup>
<Content Include="Folder\Content.txt" />
<Content Include="LinkedContent.txt">
<Link>Folder\LinkedContent.txt</Link>
</Content>
</ItemGroup>
<ItemGroup>
<InterfaceDefinition Include="MainStoryboard.storyboard" />
<InterfaceDefinition Include="iPhoneView.xib" />
<InterfaceDefinition Include="en.lproj\TranslatedView.xib" />
<InterfaceDefinition Include="Folder\FolderView.xib" />
</ItemGroup>
<ItemGroup>
<ITunesArtwork Include="iTunesArtwork" />
<ITunesArtwork Include="iTunesArtwork%402x" />
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Contents.json" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon.png" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon%402x.png" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-60%402x.png" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small.png" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small%402x.png" />
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-40%402x.png" />
<ImageAsset Include="Resources\Images.xcassets\LaunchImage.launchimage\Contents.json" />
<ImageAsset Include="Resources\Images.xcassets\LaunchImage.launchimage\Default.png" />
<ImageAsset Include="Resources\Images.xcassets\LaunchImage.launchimage\Default%402x.png" />
<ImageAsset Include="Resources\Images.xcassets\LaunchImage.launchimage\Default-568h%402x.png" />
</ItemGroup>
<ItemGroup>
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0001.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0002.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0003.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0004.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0005.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0006.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0007.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0008.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0009.png" />
<AtlasTexture Include="Resources\Archer\Archer_Attack.atlas\archer_attack_0010.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,34 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "My Spaced App", "My Spaced App.csproj", "{CD172548-2120-4FDA-9323-534F7EB019E3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Release|iPhoneSimulator = Release|iPhoneSimulator
Debug|iPhone = Debug|iPhone
Release|iPhone = Release|iPhone
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Debug|iPhone.ActiveCfg = Debug|iPhone
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Debug|iPhone.Build.0 = Debug|iPhone
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Release|iPhone.ActiveCfg = Release|iPhone
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Release|iPhone.Build.0 = Release|iPhone
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{8F2D37C2-BF1F-408A-8E7E-1B89D2126DFB}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{CD172548-2120-4FDA-9323-534F7EB019E3}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{CD172548-2120-4FDA-9323-534F7EB019E3}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{CD172548-2120-4FDA-9323-534F7EB019E3}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{CD172548-2120-4FDA-9323-534F7EB019E3}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{CD172548-2120-4FDA-9323-534F7EB019E3}.Debug|iPhone.ActiveCfg = Debug|iPhone
{CD172548-2120-4FDA-9323-534F7EB019E3}.Debug|iPhone.Build.0 = Debug|iPhone
{CD172548-2120-4FDA-9323-534F7EB019E3}.Release|iPhone.ActiveCfg = Release|iPhone
{CD172548-2120-4FDA-9323-534F7EB019E3}.Release|iPhone.Build.0 = Release|iPhone
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = My Spaced App.csproj
EndGlobalSection
EndGlobal

Просмотреть файл

@ -0,0 +1,60 @@
using System;
using CoreGraphics;
using Foundation;
using UIKit;
namespace MySpacedApp
{
public partial class MySpacedAppViewController : UIViewController
{
public MySpacedAppViewController (IntPtr handle) : base (handle)
{
}
public override void DidReceiveMemoryWarning ()
{
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning ();
// Release any cached data, images, etc that aren't in use.
}
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
}
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
}
public override void ViewDidAppear (bool animated)
{
base.ViewDidAppear (animated);
}
public override void ViewWillDisappear (bool animated)
{
base.ViewWillDisappear (animated);
}
public override void ViewDidDisappear (bool animated)
{
base.ViewDidDisappear (animated);
}
#endregion
public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
// Return true for supported orientations
return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown);
}
}
}

17
msbuild/tests/My Spaced App/MySpacedAppViewController.designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,17 @@
//
// This file has been generated automatically by MonoDevelop to store outlets and
// actions made in the Xcode designer. If it is removed, they will be lost.
// Manual changes to this file may not be handled correctly.
//
using Foundation;
namespace MySpacedApp
{
[Register ("MySpacedAppViewController")]
partial class MySpacedAppViewController
{
void ReleaseDesignerOutlets ()
{
}
}
}

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 39 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 42 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 40 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 33 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 33 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 34 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 34 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 34 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 39 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 40 KiB

Просмотреть файл

@ -0,0 +1,94 @@
{
"images": [
{
"filename": "Icon-Small.png",
"size": "29x29",
"scale": "1x",
"idiom": "iphone"
},
{
"filename": "Icon-Small@2x.png",
"size": "29x29",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-Small-40@2x.png",
"size": "40x40",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon.png",
"size": "57x57",
"scale": "1x",
"idiom": "iphone"
},
{
"filename": "Icon@2x.png",
"size": "57x57",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-60@2x.png",
"size": "60x60",
"scale": "2x",
"idiom": "iphone"
},
{
"size": "29x29",
"scale": "1x",
"idiom": "ipad"
},
{
"size": "29x29",
"scale": "2x",
"idiom": "ipad"
},
{
"size": "40x40",
"scale": "1x",
"idiom": "ipad"
},
{
"size": "40x40",
"scale": "2x",
"idiom": "ipad"
},
{
"size": "50x50",
"scale": "1x",
"idiom": "ipad"
},
{
"size": "50x50",
"scale": "2x",
"idiom": "ipad"
},
{
"size": "72x72",
"scale": "1x",
"idiom": "ipad"
},
{
"size": "72x72",
"scale": "2x",
"idiom": "ipad"
},
{
"size": "76x76",
"scale": "1x",
"idiom": "ipad"
},
{
"size": "76x76",
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
},
}

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.6 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.0 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 5.2 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 5.1 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Просмотреть файл

@ -0,0 +1,33 @@
{
"images": [
{
"orientation": "portrait",
"idiom": "iphone",
"extent": "full-screen",
"filename": "Default.png",
"size": "320x480",
"scale": "1x"
},
{
"orientation": "portrait",
"idiom": "iphone",
"extent": "full-screen",
"filename": "Default@2x.png",
"size": "320x480",
"scale": "2x"
},
{
"orientation": "portrait",
"idiom": "iphone",
"extent": "full-screen",
"filename": "Default-568h@2x.png",
"size": "320x568",
"subtype": "retina4",
"scale": "2x"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 5.2 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
msbuild/tests/My Spaced App/Resources/image.png Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 3.5 KiB

Просмотреть файл

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4469" systemVersion="13A476u" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3694" />
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" />
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder" />
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="568" />
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" />
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite" />
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" />
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4" />
</view>
</objects>
</document>

Просмотреть файл

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4469" systemVersion="13A476u" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3694" />
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" />
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder" />
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="568" />
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" />
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite" />
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" />
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4" />
</view>
</objects>
</document>

Двоичные данные
msbuild/tests/My Spaced App/iTunesArtwork Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 106 KiB

Двоичные данные
msbuild/tests/My Spaced App/iTunesArtwork@2x Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 273 KiB

Просмотреть файл

@ -78,7 +78,7 @@ namespace Xamarin.iOS.Tasks
TestFilesExists (AppBundlePath, ExpectedAppFiles);
TestFilesDoNotExist (AppBundlePath, UnexpectedAppFiles);
var coreFiles = GetCoreAppFiles (platform, config, appName + ".exe", appName);
var coreFiles = GetCoreAppFiles (platform, config, appName.Replace (" ", "") + ".exe", appName.Replace (" ", ""));
var baseDirs = new string [] {
Path.Combine (AppBundlePath, ".monotouch-32"),
Path.Combine (AppBundlePath, ".monotouch-64"),

Просмотреть файл

@ -0,0 +1,22 @@
using System;
using System.IO;
using NUnit.Framework;
namespace Xamarin.iOS.Tasks
{
[TestFixture ("iPhone")]
[TestFixture ("iPhoneSimulator")]
public class ProjectWithSpacesTests : ProjectTest
{
public ProjectWithSpacesTests (string platform) : base (platform)
{
}
[Test]
public void BasicTest ()
{
this.BuildProject ("My Spaced App", Platform, "Debug", clean: false);
}
}
}

Просмотреть файл

@ -107,7 +107,7 @@ namespace Xamarin.iOS.Tasks
Task.ExtraArgs = "--customarg";
var args = Task.GenerateCommandLineCommands ();
Assert.IsTrue (Task.ResponseFile.Contains ("--customarg"), "#1");
Assert.IsTrue (args.Contains ("--customarg"), "#1");
}
[Test]
@ -187,13 +187,13 @@ namespace Xamarin.iOS.Tasks
Task.ProjectDir = "path/to";
Task.ExtraArgs = "xyz-${ProjectDir}-xyz xxx-${AppBundleDir}-xxx yyy-${TargetPath}-yyy yzy-${TargetDir}-yzy zzz-${TargetName}-zzz zyx-${TargetExt}-zyx";
var args = Task.GenerateCommandLineCommands ();
Assert.IsFalse (Task.ResponseFile.Contains ("$"), "#1");
Assert.IsTrue (Task.ResponseFile.Contains ("xyz-path/to-xyz"), "#ProjectDir");
Assert.IsTrue (Task.ResponseFile.Contains ("xxx-../MySingleView/bin/iPhoneSimulator/Debug/MySingleView.app-xxx"), "#AppBundleDir");
Assert.IsTrue (Task.ResponseFile.Contains ("yyy-Main.exe-yyy"), "#TargetPath");
Assert.IsTrue (Task.ResponseFile.Contains ("yzy--yzy"), "#TargetDir");
Assert.IsTrue (Task.ResponseFile.Contains ("zzz-Main.exe-zzz"), "#TargetName");
Assert.IsTrue (Task.ResponseFile.Contains ("zyx-.exe-zyx"), "#TargetExt");
Assert.IsFalse (args.Contains ("$"), "#1");
Assert.IsTrue (args.Contains ("xyz-path/to-xyz"), "#ProjectDir");
Assert.IsTrue (args.Contains ("xxx-../MySingleView/bin/iPhoneSimulator/Debug/MySingleView.app-xxx"), "#AppBundleDir");
Assert.IsTrue (args.Contains ("yyy-Main.exe-yyy"), "#TargetPath");
Assert.IsTrue (args.Contains ("yzy--yzy"), "#TargetDir");
Assert.IsTrue (args.Contains ("zzz-Main.exe-zzz"), "#TargetName");
Assert.IsTrue (args.Contains ("zyx-.exe-zyx"), "#TargetExt");
} finally {
Task.ExtraArgs = null;
}
@ -203,8 +203,8 @@ namespace Xamarin.iOS.Tasks
public void BuildEntitlementFlagsTest ()
{
var args = Task.GenerateCommandLineCommands ();
Assert.IsTrue (Task.ResponseFile.Contains ("\"--gcc_flags=-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker"), "#1");
Assert.IsTrue (Task.ResponseFile.Contains ("Entitlements.plist"), "#2");
Assert.IsTrue (args.Contains ("\"--gcc_flags=-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker"), "#1");
Assert.IsTrue (args.Contains ("Entitlements.plist"), "#2");
}
[Test]

Просмотреть файл

@ -104,7 +104,7 @@ namespace Xamarin.iOS.Tasks
ProjectBinPath = binPath,
ProjectObjPath = objPath,
ProjectCSProjPath = Path.Combine (projectPath, csprojName + ".csproj"),
AppBundlePath = Path.Combine (binPath, projectName + ".app"),
AppBundlePath = Path.Combine (binPath, projectName.Replace (" ", "") + ".app"),
};
}

Просмотреть файл

@ -106,6 +106,7 @@
<Compile Include="..\..\..\tests\common\ExecutionHelper.cs">
<Link>ExecutionHelper.cs</Link>
</Compile>
<Compile Include="ProjectsTests\ProjectWithSpaces.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />