Add split runtime / design time for iOS and tvos

This commit is contained in:
7sharp9 2016-03-08 15:35:54 +00:00
Родитель c281ff9895
Коммит bb3918de52
46 изменённых файлов: 1788 добавлений и 142 удалений

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

@ -11,6 +11,8 @@ Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "SingleViewUniversal", "unif
EndProject
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "WatchkitTest", "unified\WatchkitTest\WatchkitTest.fsproj", "{9D0AE0B1-5E14-4539-9F8C-50C20E003E36}"
EndProject
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "singleview_tvOS", "unified\singleview_tvOS\singleview_tvOS.fsproj", "{00BF2AD3-867C-4A12-8AE6-907D4F02380F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
@ -87,11 +89,28 @@ Global
{9D0AE0B1-5E14-4539-9F8C-50C20E003E36}.Ad-Hoc|iPhone.Build.0 = Release|iPhone
{9D0AE0B1-5E14-4539-9F8C-50C20E003E36}.AppStore|iPhone.ActiveCfg = Release|iPhone
{9D0AE0B1-5E14-4539-9F8C-50C20E003E36}.AppStore|iPhone.Build.0 = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|x86.Build.0 = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|x86.ActiveCfg = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|x86.Build.0 = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|iPhone.ActiveCfg = Debug|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Debug|iPhone.Build.0 = Debug|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|iPhone.ActiveCfg = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Release|iPhone.Build.0 = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Ad-Hoc|iPhone.ActiveCfg = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.Ad-Hoc|iPhone.Build.0 = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.AppStore|iPhone.ActiveCfg = Release|iPhone
{00BF2AD3-867C-4A12-8AE6-907D4F02380F}.AppStore|iPhone.Build.0 = Release|iPhone
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{14BE2E7C-3220-4128-A8B2-45DCB985B844} = {84C29D09-A71E-4B50-BD40-A679904BB3D9}
{A202739B-6E4E-4772-A2B6-2E427643FF15} = {84C29D09-A71E-4B50-BD40-A679904BB3D9}
{4A95C0B9-1453-47C0-B6A1-FEE6122BD11A} = {84C29D09-A71E-4B50-BD40-A679904BB3D9}
{9D0AE0B1-5E14-4539-9F8C-50C20E003E36} = {84C29D09-A71E-4B50-BD40-A679904BB3D9}
{00BF2AD3-867C-4A12-8AE6-907D4F02380F} = {84C29D09-A71E-4B50-BD40-A679904BB3D9}
EndGlobalSection
EndGlobal

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

@ -89,8 +89,8 @@
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Xamarin.iOS" />
<Reference Include="Xamarin.iOSProviders">
<HintPath>..\..\..\src\Xamarin.iOSProviders\bin\Debug\Xamarin.iOSProviders.dll</HintPath>
<Reference Include="Xamarin.UIProvider.iOSRuntime">
<HintPath>..\..\..\src\Build\Debug\Xamarin.UIProvider.iOSRuntime.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>

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

@ -9,12 +9,6 @@ open Xamarin.iOSProviders
//view controller is generated from the type provider and embedded into the assembly here
type VCContainer = UIProvider<AbstractController=false>
type VCContainer with
member x.Test () = 172
// override x.ToString() = ""
type VCContainer.ViewController with
member x.ToString() = "172"
[<Register ("ViewController")>]
type ViewController (handle:IntPtr) =

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

@ -0,0 +1,12 @@
namespace singleview_tvOS
open System
open UIKit
open Foundation
[<Register("AppDelegate")>]
type AppDelegate() =
inherit UIApplicationDelegate()
override val Window = null with get, set
// This method is invoked when the application is ready to run.
override this.FinishedLaunching(app, options) = true

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,17 @@
{
"layers" : [
{
"filename" : "Front.imagestacklayer"
},
{
"filename" : "Middle.imagestacklayer"
},
{
"filename" : "Back.imagestacklayer"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,17 @@
{
"layers" : [
{
"filename" : "Front.imagestacklayer"
},
{
"filename" : "Middle.imagestacklayer"
},
{
"filename" : "Back.imagestacklayer"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,26 @@
{
"assets" : [
{
"size" : "1280x768",
"idiom" : "tv",
"filename" : "App Icon - Large.imagestack",
"role" : "primary-app-icon"
},
{
"size" : "400x240",
"idiom" : "tv",
"filename" : "App Icon - Small.imagestack",
"role" : "primary-app-icon"
},
{
"size" : "1920x720",
"idiom" : "tv",
"filename" : "Top Shelf Image.imageset",
"role" : "top-shelf-image"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,54 @@
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

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

@ -0,0 +1,162 @@
{
"images": [
{
"minimum-system-version": "8.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "414x736",
"subtype": "736h",
"scale": "3x",
"idiom": "iphone"
},
{
"minimum-system-version": "8.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "375x667",
"subtype": "667h",
"scale": "2x",
"idiom": "iphone"
},
{
"minimum-system-version": "8.0",
"orientation": "landscape",
"extent": "full-screen",
"size": "736x414",
"subtype": "736h",
"scale": "3x",
"idiom": "iphone"
},
{
"minimum-system-version": "7.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "320x480",
"scale": "2x",
"idiom": "iphone"
},
{
"minimum-system-version": "7.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "320x568",
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"minimum-system-version": "7.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "768x1024",
"scale": "1x",
"idiom": "ipad"
},
{
"minimum-system-version": "7.0",
"orientation": "portrait",
"extent": "full-screen",
"size": "768x1024",
"scale": "2x",
"idiom": "ipad"
},
{
"minimum-system-version": "7.0",
"orientation": "landscape",
"extent": "full-screen",
"size": "1024x768",
"scale": "1x",
"idiom": "ipad"
},
{
"minimum-system-version": "7.0",
"orientation": "landscape",
"extent": "full-screen",
"size": "1024x768",
"scale": "2x",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "full-screen",
"size": "320x480",
"scale": "1x",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"size": "320x480",
"scale": "2x",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"size": "320x568",
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"size": "768x1024",
"scale": "1x",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "full-screen",
"size": "768x1024",
"scale": "2x",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "to-status-bar",
"size": "768x1004",
"scale": "1x",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "to-status-bar",
"size": "768x1004",
"scale": "2x",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"size": "1024x768",
"scale": "1x",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"size": "1024x768",
"scale": "2x",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "to-status-bar",
"size": "1024x748",
"scale": "1x",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "to-status-bar",
"size": "1024x748",
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

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

@ -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,35 @@
<?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>CFBundleDisplayName</key>
<string>singleview-tvOS</string>
<key>CFBundleName</key>
<string>singleview-tvOS</string>
<key>CFBundleIdentifier</key>
<string>com.companyname.singleview-tvos</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.1</string>
<key>UIDeviceFamily</key>
<array>
<integer>3</integer>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>XSAppIconAssets</key>
<string>Assets.xcassets/App Icon &amp; Top Shelf Image.brandassets</string>
<key>XSLaunchImageAssets</key>
<string>Assets.xcassets/LaunchImages.launchimage</string>
</dict>
</plist>

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

@ -0,0 +1,9 @@
namespace singleview_tvOS
open UIKit
module Main =
[<EntryPoint>]
let main args =
UIApplication.Main(args, null, "AppDelegate")
0

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

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder.AppleTV.Storyboard" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
</dependencies>
<scenes>
<!--My View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="myViewController" customModule="Purple_Death" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC" customClass="test">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BAb-Xk-W2h">
<rect key="frame" x="587" y="297" width="304" height="86"/>
<inset key="contentEdgeInsets" minX="40" minY="20" maxX="40" maxY="20"/>
<state key="normal" title="Do Not Press"/>
<connections>
<action selector="doNotPressAction:" destination="BYZ-38-t0r" eventType="primaryActionTriggered" id="93C-4v-At6"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Swift Was Here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xDR-Xb-Ar1">
<rect key="frame" x="587" y="245" width="304" height="44"/>
<fontDescription key="fontDescription" type="system" pointSize="30"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
<connections>
<outlet property="myButton" destination="BAb-Xk-W2h" id="QO8-Mf-imE"/>
<outlet property="myLabel" destination="xDR-Xb-Ar1" id="NX6-84-hyj"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="188" y="139"/>
</scene>
</scenes>
</document>

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

@ -0,0 +1,25 @@
namespace singleview_tvOS
open System
open Foundation
open UIKit
type container = Xamarin.UIProvider
[<Register(container.myViewControllerBase.CustomClass)>]
type ViewController(handle : IntPtr) =
inherit container.myViewControllerBase(handle)
override x.DidReceiveMemoryWarning() =
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
override x.ViewDidLoad() =
x.DoNotPressAction <- Some (fun sender -> x.View.BackgroundColor <- UIColor.Purple
x.myLabel.Text <- "Bang!" )
base.ViewDidLoad()
// Perform any additional setup after loading the view, typically from a nib.

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

@ -0,0 +1,131 @@
<?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>
<ProjectGuid>{00BF2AD3-867C-4A12-8AE6-907D4F02380F}</ProjectGuid>
<ProjectTypeGuids>{06FA79CB-D6CD-4721-BB4B-1BD202089C55};{F2A71F9B-5D33-465A-A702-920D77279786}</ProjectTypeGuids>
<OutputType>Exe</OutputType>
<RootNamespace>singleview_tvOS</RootNamespace>
<AssemblyName>singleview_tvOS</AssemblyName>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
</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>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchDebug>true</MtouchDebug>
<MtouchFastDev>true</MtouchFastDev>
<MtouchProfiling>true</MtouchProfiling>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<MtouchFloat32>true</MtouchFloat32>
<CodesignEntitlements></CodesignEntitlements>
<MtouchLink>None</MtouchLink>
<MtouchArch>x86_64</MtouchArch>
<DeviceSpecificBuild>false</DeviceSpecificBuild>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<DefineConstants></DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchUseLlvm>true</MtouchUseLlvm>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<MtouchFloat32>true</MtouchFloat32>
<MtouchEnableBitcode>true</MtouchEnableBitcode>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARM64</MtouchArch>
<GenerateTailCalls>true</GenerateTailCalls>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<Optimize>true</Optimize>
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
<DefineConstants></DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<MtouchFloat32>true</MtouchFloat32>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchLink>None</MtouchLink>
<MtouchArch>x86_64</MtouchArch>
<GenerateTailCalls>true</GenerateTailCalls>
</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>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer: de.thomas@ntlworld.com (EQ9W2F545F)</CodesignKey>
<DeviceSpecificBuild>true</DeviceSpecificBuild>
<MtouchDebug>true</MtouchDebug>
<MtouchFastDev>true</MtouchFastDev>
<MtouchProfiling>true</MtouchProfiling>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<MtouchFloat32>true</MtouchFloat32>
<CodesignEntitlements></CodesignEntitlements>
<MtouchLink>None</MtouchLink>
<MtouchArch>ARM64</MtouchArch>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="mscorlib" />
<Reference Include="FSharp.Core" />
<Reference Include="Xamarin.TVOS" />
<Reference Include="Xamarin.UIProvider.TVOSRuntime">
<HintPath>..\..\..\src\Build\Debug\Xamarin.UIProvider.TVOSRuntime.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Back.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Back.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Front.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Front.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Middle.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Large.imagestack\Middle.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Back.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Back.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Front.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Front.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Middle.imagestacklayer\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\App Icon - Small.imagestack\Middle.imagestacklayer\Content.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\App Icon &amp; Top Shelf Image.brandassets\Top Shelf Image.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\LaunchImages.launchimage\Contents.json" />
<ImageAsset Include="Assets.xcassets\Contents.json" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
</ItemGroup>
<ItemGroup>
<None Include="Info.plist" />
<None Include="Entitlements.plist" />
</ItemGroup>
<ItemGroup>
<InterfaceDefinition Include="Main.storyboard" />
</ItemGroup>
<ItemGroup>
<Compile Include="ViewController.fs" />
<Compile Include="AppDelegate.fs" />
<Compile Include="Main.fs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\TVOS\Xamarin.TVOS.FSharp.targets" />
</Project>

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

@ -0,0 +1,20 @@
namespace Xamarin.UIProvider.iOSRuntime
open System.Reflection
open System.Runtime.CompilerServices
[<assembly: AssemblyTitle("Xamarin.UIProvider.iOSRuntime")>]
[<assembly: AssemblyDescription("")>]
[<assembly: AssemblyConfiguration("")>]
[<assembly: AssemblyCompany("")>]
[<assembly: AssemblyProduct("")>]
[<assembly: AssemblyCopyright("dave")>]
[<assembly: AssemblyTrademark("")>]
// The assembly version has the format {Major}.{Minor}.{Build}.{Revision}
[<assembly: AssemblyVersion("1.0.0.0")>]
//[<assembly: AssemblyDelaySign(false)>]
//[<assembly: AssemblyKeyFile("")>]
()

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

@ -0,0 +1,5 @@
namespace global
open Microsoft.FSharp.Core.CompilerServices
[<assembly:TypeProviderAssembly("Xamarin.UIProviders.DesignTime")>]
()

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

@ -0,0 +1,52 @@
<?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)' == '' ">AnyCPU</Platform>
<ProjectGuid>{90F944F1-593E-4960-B374-0F1367C1D0ED}</ProjectGuid>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{F2A71F9B-5D33-465A-A702-920D77279786}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>Xamarin.UIProvider.iOSRuntime</RootNamespace>
<AssemblyName>Xamarin.UIProvider.iOSRuntime</AssemblyName>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Build\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<PlatformTarget></PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>..\Build\Release</OutputPath>
<DefineConstants></DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<MtouchUseSGen>true</MtouchUseSGen>
<MtouchUseRefCounting>true</MtouchUseRefCounting>
<GenerateTailCalls>true</GenerateTailCalls>
<PlatformTarget></PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="mscorlib" />
<Reference Include="FSharp.Core" />
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.fs" />
<Compile Include="Component1.fs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.FSharp.targets" />
</Project>

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

@ -0,0 +1,20 @@
namespace Xamarin.UIProvider.TVOSRuntime
open System.Reflection
open System.Runtime.CompilerServices
[<assembly: AssemblyTitle("Xamarin.UIProvider.TVOSRuntime")>]
[<assembly: AssemblyDescription("")>]
[<assembly: AssemblyConfiguration("")>]
[<assembly: AssemblyCompany("")>]
[<assembly: AssemblyProduct("")>]
[<assembly: AssemblyCopyright("dave")>]
[<assembly: AssemblyTrademark("")>]
// The assembly version has the format {Major}.{Minor}.{Build}.{Revision}
[<assembly: AssemblyVersion("1.0.0.0")>]
//[<assembly: AssemblyDelaySign(false)>]
//[<assembly: AssemblyKeyFile("")>]
()

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

@ -0,0 +1,5 @@
namespace global
open Microsoft.FSharp.Core.CompilerServices
[<assembly:TypeProviderAssembly("Xamarin.UIProviders.DesignTime")>]
()

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

@ -0,0 +1,45 @@
<?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)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4F84B7DD-A5E0-4BC3-9C9F-565988030202}</ProjectGuid>
<ProjectTypeGuids>{06FA79CB-D6CD-4721-BB4B-1BD202089C55};{F2A71F9B-5D33-465A-A702-920D77279786}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>Xamarin.UIProvider.TVOSRuntime</RootNamespace>
<AssemblyName>Xamarin.UIProvider.TVOSRuntime</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Build\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<PlatformTarget></PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>..\Build\Release</OutputPath>
<DefineConstants></DefineConstants>
<ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause>
<GenerateTailCalls>true</GenerateTailCalls>
<PlatformTarget></PlatformTarget>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\TVOS\Xamarin.TVOS.FSharp.targets" />
<ItemGroup>
<Compile Include="AssemblyInfo.fs" />
<Compile Include="Component1.fs" />
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="mscorlib" />
<Reference Include="FSharp.Core" />
<Reference Include="Xamarin.TVOS" />
</ItemGroup>
</Project>

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

@ -1,7 +1,11 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "Xamarin.iOSProviders", "Xamarin.iOSProviders\Xamarin.iOSProviders.fsproj", "{DD17E7B0-6EE1-4862-80F8-E0CAB67D6137}"
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "Xamarin.UIProviders.DesignTime", "Xamarin.iOSProviders\Xamarin.UIProviders.DesignTime.fsproj", "{DD17E7B0-6EE1-4862-80F8-E0CAB67D6137}"
EndProject
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "Xamarin.UIProvider.TVOSRuntime", "Xamarin.UIProvider.TVOSRuntime\Xamarin.UIProvider.TVOSRuntime.fsproj", "{4F84B7DD-A5E0-4BC3-9C9F-565988030202}"
EndProject
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "Xamarin.UIProvider.iOSRuntime", "Xamarin.UIProvider.iOSRuntime\Xamarin.UIProvider.iOSRuntime.fsproj", "{90F944F1-593E-4960-B374-0F1367C1D0ED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -52,6 +56,34 @@ Global
{B85F245B-3FB9-4253-8251-16F98F05B6EC}.Release|iPhone.Build.0 = Release|Any CPU
{B85F245B-3FB9-4253-8251-16F98F05B6EC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B85F245B-3FB9-4253-8251-16F98F05B6EC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|iPhone.Build.0 = Debug|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Release|iPhone.ActiveCfg = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Release|iPhone.Build.0 = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.AppStore|iPhone.Build.0 = Release|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F84B7DD-A5E0-4BC3-9C9F-565988030202}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|iPhone.Build.0 = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Release|iPhone.ActiveCfg = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Release|iPhone.Build.0 = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.AppStore|iPhone.Build.0 = Release|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90F944F1-593E-4960-B374-0F1367C1D0ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
EndGlobalSection

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

@ -1,4 +1,4 @@
namespace Xamarin.iOSProviders
namespace Xamarin.UIProviders.DesignTime
open System.Reflection
open System.Runtime.CompilerServices

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

@ -0,0 +1,524 @@
// --------------------------------------------------------------------------------------
// Helpers for writing type providers
// ----------------------------------------------------------------------------------------------
namespace ProviderImplementation
open System
open System.Collections.Generic
open System.Reflection
open System.Text
open Microsoft.FSharp.Core.CompilerServices
open Microsoft.FSharp.Core.Printf
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Quotations.Patterns
open Microsoft.FSharp.Reflection
open ProviderImplementation.ProvidedTypes
module internal Debug =
/// Simulates a real instance of TypeProviderConfig and then creates an instance of the last
/// type provider added to a namespace by the type provider constructor
let generate (resolutionFolder: string) (runtimeAssembly: string) typeProviderForNamespacesConstructor args =
let cfg = new TypeProviderConfig(fun _ -> false)
let (?<-) cfg prop value =
cfg.GetType().GetProperty(prop).GetSetMethod(nonPublic = true).Invoke(cfg, [| box value |]) |> ignore
cfg?ResolutionFolder <- resolutionFolder
cfg?RuntimeAssembly <- runtimeAssembly
cfg?ReferencedAssemblies <- Array.zeroCreate<string> 0
let typeProviderForNamespaces = typeProviderForNamespacesConstructor cfg :> TypeProviderForNamespaces
let providedTypeDefinition = typeProviderForNamespaces.Namespaces |> Seq.last |> snd |> Seq.last
match args with
| [||] -> providedTypeDefinition
| args ->
let typeName =
if providedTypeDefinition.IsErased then
providedTypeDefinition.Name + (args |> Seq.map (fun s -> ",\"" + (if s = null then "" else s.ToString()) + "\"") |> Seq.reduce (+))
else
// The type name ends up quite mangled in the dll output if we combine the name using static parameters, so for generated types we don't do that
providedTypeDefinition.Name
providedTypeDefinition.MakeParametricType(typeName, args)
/// Returns a string representation of the signature (and optionally also the body) of all the
/// types generated by the type provider up to a certain depth and width
/// If ignoreOutput is true, this will still visit the full graph, but it will output an empty string to be faster
let prettyPrint signatureOnly ignoreOutput maxDepth maxWidth (t: ProvidedTypeDefinition) =
let ns =
[ t.Namespace
"Microsoft.FSharp.Core"
"Microsoft.FSharp.Core.Operators"
"Microsoft.FSharp.Collections"
"Microsoft.FSharp.Control"
"Microsoft.FSharp.Text" ]
|> Set.ofSeq
let pending = new Queue<_>()
let visited = new HashSet<_>()
let add t =
if visited.Add t then
pending.Enqueue t
let fullName (t: Type) =
let fullName = t.Namespace + "." + t.Name
if fullName.StartsWith "FSI_" then
fullName.Substring(fullName.IndexOf('.') + 1)
else
fullName
let rec toString useFullName (t: Type) =
let hasUnitOfMeasure = t.Name.Contains("[")
let innerToString (t: Type) =
match t with
| t when t = typeof<bool> -> "bool"
| t when t = typeof<obj> -> "obj"
| t when t = typeof<int> -> "int"
| t when t = typeof<int64> -> "int64"
| t when t = typeof<float> -> "float"
| t when t = typeof<float32> -> "float32"
| t when t = typeof<decimal> -> "decimal"
| t when t = typeof<string> -> "string"
| t when t = typeof<Void> -> "()"
| t when t = typeof<unit> -> "()"
| t when t.IsArray -> (t.GetElementType() |> toString useFullName) + "[]"
| :? ProvidedTypeDefinition as t ->
add t
t.Name.Split(',').[0]
| t when t.IsGenericType ->
let args =
if useFullName then
t.GetGenericArguments()
|> Seq.map (if hasUnitOfMeasure then (fun t -> t.Name) else toString useFullName)
else
t.GetGenericArguments()
|> Seq.map (fun _ -> "_")
if FSharpType.IsTuple t then
String.concat " * " args
elif t.Name.StartsWith "FSharpFunc`" then
"(" + (String.concat " -> " args) + ")"
else
let args = String.concat "," args
let name, reverse =
match t with
| t when hasUnitOfMeasure -> toString useFullName t.UnderlyingSystemType, false
| t when t.GetGenericTypeDefinition().Name = typeof<int seq>.GetGenericTypeDefinition().Name -> "seq", true
| t when t.GetGenericTypeDefinition().Name = typeof<int list>.GetGenericTypeDefinition().Name -> "list", true
| t when t.GetGenericTypeDefinition().Name = typeof<int option>.GetGenericTypeDefinition().Name -> "option", true
| t when t.GetGenericTypeDefinition().Name = typeof<int ref>.GetGenericTypeDefinition().Name -> "ref", true
| t when t.Name = "FSharpAsync`1" -> "async", true
| t when ns.Contains t.Namespace -> t.Name, false
| t -> (if useFullName then fullName t else t.Name), false
let name = name.Split('`').[0]
if reverse then
args + " " + name
else
name + "<" + args + ">"
| t when ns.Contains t.Namespace -> t.Name
| t when t.IsGenericParameter -> t.Name
| t -> if useFullName then fullName t else t.Name
let rec warnIfWrongAssembly (t:Type) =
match t with
| :? ProvidedTypeDefinition -> ""
| t when t.IsGenericType -> defaultArg (t.GetGenericArguments() |> Seq.map warnIfWrongAssembly |> Seq.tryFind (fun s -> s <> "")) ""
| t when t.IsArray -> warnIfWrongAssembly <| t.GetElementType()
| t -> if not t.IsGenericParameter && t.Assembly = Assembly.GetExecutingAssembly() then " [DESIGNTIME]" else ""
if ignoreOutput then
""
elif hasUnitOfMeasure || t.IsGenericParameter || t.DeclaringType = null then
innerToString t + (warnIfWrongAssembly t)
else
(toString useFullName t.DeclaringType) + "+" + (innerToString t) + (warnIfWrongAssembly t)
let toSignature (parameters: ParameterInfo[]) =
if parameters.Length = 0 then
"()"
else
parameters
|> Seq.map (fun p -> p.Name + ":" + (toString true p.ParameterType))
|> String.concat " -> "
let printExpr expr =
let sb = StringBuilder ()
let print (str:string) = sb.Append(str) |> ignore
let getCurrentIndent() =
let lastEnterPos = sb.ToString().LastIndexOf('\n')
if lastEnterPos = -1 then sb.Length + 4 else sb.Length - lastEnterPos - 1
let breakLine indent =
print "\n"
print (new String(' ', indent))
let isBigExpression = function
| Let _ | NewArray _ | NewTuple _ -> true
| _ -> false
let inline getAttrs attrName m =
( ^a : (member GetCustomAttributesData : unit -> IList<CustomAttributeData>) m)
|> Seq.filter (fun attr -> attr.Constructor.DeclaringType.Name = attrName)
let inline hasAttr attrName m =
not (Seq.isEmpty (getAttrs attrName m))
let rec printSeparatedByCommas exprs =
match exprs with
| [] -> ()
| e::es ->
printExpr false true e
for e in es do
print ", "
printExpr false true e
and printCall fromPipe printName (mi:MethodInfo) args =
if fromPipe && List.length args = 1 then
printName()
elif not (hasAttr "CompilationArgumentCountsAttribute" mi) then
printName()
match args with
| [] -> print "()"
| arg::args ->
print "("
let indent = getCurrentIndent()
printExpr false true arg
for arg in args do
print ", "
if isBigExpression arg then
breakLine indent
printExpr false true arg
print ")"
else
print "("
printName()
for arg in args do
print " "
printExpr false true arg
print ")"
and printExpr fromPipe needsParens = function
| Call (instance, mi, args) ->
if mi.Name = "GetArray" && mi.DeclaringType.FullName = "Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions" then
printExpr false true args.Head
print ".["
printExpr false true args.Tail.Head
print "]"
elif mi.DeclaringType.IsGenericType && mi.DeclaringType.GetGenericTypeDefinition().Name = typeof<int option>.GetGenericTypeDefinition().Name then
if args.IsEmpty then
match instance with
| None -> print "None"
| Some instance ->
printExpr false true instance
print "."
print <| mi.Name.Substring("get_".Length)
else
print "Some "
printExpr false true args.Head
elif mi.Name.Contains "." && not args.IsEmpty then
// instance method in type extension
let printName() =
printExpr false true args.Head
print "."
print (mi.Name.Substring(mi.Name.IndexOf '.' + 1))
printCall fromPipe printName mi args.Tail
elif mi.Attributes &&& MethodAttributes.SpecialName = MethodAttributes.SpecialName && mi.Name.StartsWith "get_" && args.IsEmpty then
// property get
match instance with
| Some expr -> printExpr false true expr
| None -> print (toString false mi.DeclaringType)
print "."
print <| mi.Name.Substring("get_".Length)
elif mi.Name = "op_PipeRight" && args.Length = 2 then
printExpr false false args.Head
print " |> "
match args.Tail.Head with
| Lambda (_, (Call(_,_,_) as call)) -> printExpr true false call
| _ as expr -> printExpr false false expr
else
let printName() =
match instance with
| Some expr -> printExpr false true expr
| None -> print (toString false mi.DeclaringType)
print "."
print mi.Name
let isOptional (arg:Expr, param:ParameterInfo) =
hasAttr "OptionalArgumentAttribute" param
&& arg.ToString() = "Call (None, get_None, [])"
let args =
mi.GetParameters()
|> List.ofArray
|> List.zip args
|> List.filter (not << isOptional)
|> List.map fst
printCall fromPipe printName mi args
| Let (var1, TupleGet (Var x, 1), Let (var2, TupleGet (Var y, 0), body)) when x = y ->
let indent = getCurrentIndent()
bprintf sb "let %s, %s = %s" var2.Name var1.Name x.Name
breakLine indent
printExpr false false body
| Let (var, value, body) ->
let indent = getCurrentIndent()
let usePattern = sprintf "IfThenElse(TypeTest(IDisposable,Coerce(%s,Object)),Call(Some(Call(None,UnboxGeneric,[Coerce(%s,Object)])),Dispose,[]),Value(<null>))" var.Name var.Name
let body =
match body with
| TryFinally (tryExpr, finallyExpr) when finallyExpr.ToString().Replace("\n", null).Replace(" ", null) = usePattern ->
bprintf sb "use %s = " var.Name
tryExpr
| _ ->
if var.IsMutable then
bprintf sb "let mutable %s = " var.Name
else
bprintf sb "let %s = " var.Name
body
match value with
| Let _ ->
breakLine (indent + 4)
printExpr false false value
| _ -> printExpr false false value
breakLine indent
printExpr false false body
| Value (null, _) ->
print "null"
| Value (value, typ) when typ = typeof<string> && (value :?> string).Contains("\\") ->
bprintf sb "@%A" value
| Value (value, _) ->
bprintf sb "%A" value
| Var (var) ->
print var.Name
| NewObject (ci, args) ->
let getSourceConstructFlags (attr:CustomAttributeData) =
let arg = attr.ConstructorArguments
|> Seq.filter (fun arg -> arg.ArgumentType.Name = "SourceConstructFlags")
|> Seq.head
arg.Value :?> int
let compilationMappings = getAttrs "CompilationMappingAttribute" ci.DeclaringType
if not (Seq.isEmpty compilationMappings) && (getSourceConstructFlags (Seq.head compilationMappings)) = int SourceConstructFlags.RecordType then
print "{ "
let indent = getCurrentIndent()
let recordFields = FSharpType.GetRecordFields(ci.DeclaringType)
args |> List.iteri (fun i arg ->
if i > 0 then
breakLine indent
print recordFields.[i].Name
print " = "
printExpr false false arg)
print " }"
else
print "(new "
print (toString false ci.DeclaringType)
print "("
printSeparatedByCommas args
print "))"
| NewDelegate (typ, vars, expr) ->
print "new "
print (toString false typ)
match expr with
| Var v when not vars.IsEmpty && vars.Tail.IsEmpty && vars.Head = v -> print "(id)"
| _ ->
let indent = getCurrentIndent()
if vars.IsEmpty then
print "(fun () -> "
else
print "(fun"
for var in vars do
bprintf sb " (%s:%s)" var.Name (toString false var.Type)
print " -> "
if isBigExpression expr then
breakLine (indent + 4)
printExpr false false expr
else
printExpr false false expr
print ")"
| NewTuple (exprs) ->
if needsParens then print "("
let indent = getCurrentIndent()
printExpr false true exprs.Head
for e in exprs.Tail do
print ","
breakLine indent
printExpr false true e
if needsParens then print ")"
| NewArray (_, exprs) ->
if exprs.Length = 0 then print "[| |]"
else
print "[| "
let indent = getCurrentIndent()
printExpr false true exprs.Head
for e in exprs.Tail do
breakLine indent
printExpr false true e
print " |]"
| Coerce (expr, typ) ->
print "("
printExpr false false expr
print " :> "
print (toString false typ)
print ")"
| TupleGet (expr, index) ->
print "(let "
let rec getTupleLength (typ:Type) =
let length = typ.GetGenericArguments().Length
if length = 0 then // happens in the Apiary provider
let typeNameSuffix = typ.Name.Substring(typ.Name.IndexOf('`') + 1)
typeNameSuffix.Substring(0, typeNameSuffix.IndexOf('[')) |> Int32.Parse
else
let lastItem = typ.GetGenericArguments() |> Seq.last
if lastItem.Name.StartsWith "Tuple`"
then length + getTupleLength lastItem - 1
else length
let tupleLength = getTupleLength expr.Type
let varName = "t" + (string (index + 1))
for i in 0..tupleLength-1 do
if i = index then
print varName
else
print "_"
if i <> tupleLength-1 then
print ","
print " = "
printExpr false false expr
print (" in " + varName + ")")
| expr -> print (expr.ToString())
printExpr false false expr
sb.ToString()
let sb = StringBuilder ()
let print (str: string) =
if not ignoreOutput then
sb.Append(str) |> ignore
let println() =
if not ignoreOutput then
sb.AppendLine() |> ignore
let printMember (memberInfo: MemberInfo) =
let print str =
print " "
print str
println()
let getMethodBody (m: ProvidedMethod) =
seq { if not m.IsStatic then yield (ProvidedTypeDefinition.EraseType m.DeclaringType)
for param in m.GetParameters() do yield (ProvidedTypeDefinition.EraseType param.ParameterType) }
|> Seq.map (fun typ -> Expr.Value(null, typ))
|> Array.ofSeq
|> m.GetInvokeCodeInternal false
let getConstructorBody (c: ProvidedConstructor) =
if c.IsImplicitCtor then Expr.Value(()) else
seq { for param in c.GetParameters() do yield (ProvidedTypeDefinition.EraseType param.ParameterType) }
|> Seq.map (fun typ -> Expr.Value(null, typ))
|> Array.ofSeq
|> c.GetInvokeCodeInternal false
let printExpr x =
if not ignoreOutput then
let rec removeParams x =
match x with
| Let (_, Value(null, _), body) -> removeParams body
| _ -> x
let formattedExpr = printExpr (removeParams x)
print formattedExpr
println()
let printObj x =
if ignoreOutput then
""
else
sprintf "\n%O\n" x
let getName (m:MemberInfo) =
if memberInfo.Name.Contains(" ") then
"``" + m.Name + "``"
else
m.Name
match memberInfo with
| :? ProvidedConstructor as cons ->
if not ignoreOutput then
print <| "new : " +
(toSignature <| cons.GetParameters()) + " -> " +
(toString true memberInfo.DeclaringType)
if not signatureOnly then
cons |> getConstructorBody |> printExpr
| :? ProvidedLiteralField as field ->
let value =
if signatureOnly then ""
else field.GetRawConstantValue() |> printObj
if not ignoreOutput then
print <| "val " + (getName field) + ": " +
(toString true field.FieldType) +
value
| :? ProvidedProperty as prop ->
if not ignoreOutput then
print <| (if prop.IsStatic then "static " else "") + "member " +
(getName prop) + ": " + (toString true prop.PropertyType) +
" with " + (if prop.CanRead && prop.CanWrite then "get, set" else if prop.CanRead then "get" else "set")
if not signatureOnly then
if prop.CanRead then
getMethodBody (prop.GetGetMethod() :?> ProvidedMethod) |> printExpr
if prop.CanWrite then
getMethodBody (prop.GetSetMethod() :?> ProvidedMethod) |> printExpr
| :? ProvidedMethod as m ->
if m.Attributes &&& MethodAttributes.SpecialName <> MethodAttributes.SpecialName then
if not ignoreOutput then
print <| (if m.IsStatic then "static " else "") + "member " +
(getName m) + ": " + (toSignature <| m.GetParameters()) +
" -> " + (toString true m.ReturnType)
if not signatureOnly then
m |> getMethodBody |> printExpr
| _ -> ()
add t
let currentDepth = ref 0
while pending.Count <> 0 && !currentDepth <= maxDepth do
let pendingForThisDepth = new List<_>(pending)
pending.Clear()
let pendingForThisDepth =
pendingForThisDepth
|> Seq.sortBy (fun m -> m.Name)
|> Seq.truncate maxWidth
for t in pendingForThisDepth do
//Disabled because not working on Mono
//for attr in t.GetCustomAttributesData() do
// print <| (sprintf "[<%A>]" attr).Replace("Microsoft.FSharp.Core.", null).Replace("CompilerServices.", null).Replace("Attribute(", "(")
// println()
match t with
| t when FSharpType.IsRecord t-> "record "
| t when FSharpType.IsModule t -> "module "
| t when t.IsValueType -> "struct "
| t when t.IsClass && t.IsSealed && t.IsAbstract -> "static class "
| t when t.IsClass && t.IsAbstract -> "abstract class "
| t when t.IsClass -> "class "
| _ -> ""
|> print
print (toString true t)
if t.BaseType <> typeof<obj> then
print " : "
print (toString true t.BaseType)
println()
t.GetMembers()
|> Seq.sortBy (fun m -> m.Name)
|> Seq.iter printMember
println()
currentDepth := !currentDepth + 1
sb.ToString()

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

@ -1,4 +1,4 @@
namespace Xamarin.iOSProviders
namespace Xamarin.UIProviders.DesignTime
open System
open System.IO
@ -6,11 +6,12 @@ open System.Reflection
open ProviderImplementation.ProvidedTypes
open Microsoft.FSharp.Core.CompilerServices
open Microsoft.FSharp.Quotations
open Foundation
open UIKit
//open Foundation
//open UIKit
open MonoTouch.Design
open iOSDesignerTypeProvider.ProvidedTypes
open ProvidedTypes
open ExtCore.Control
open Swensen.Unquote
module Sanitise =
let cleanTrailing = String.trimEnd [|':'|]
@ -24,25 +25,13 @@ module Sanitise =
let makeSelectorMethodName (name:string) =
(makePascalCase name) + "Selector"
module Attributes =
let MakeActionAttributeData(argument:string) =
CustomAttributeDataExt.Make (typeof<ActionAttribute>.GetConstructor (typeof<string>),
[| CustomAttributeTypedArgument (typeof<ActionAttribute>, argument) |])
let MakeRegisterAttributeData(argument:string) =
CustomAttributeDataExt.Make (typeof<RegisterAttribute>.GetConstructor (typeof<string>),
[| CustomAttributeTypedArgument (typeof<string>, argument) |])
let MakeOutletAttributeData() =
CustomAttributeDataExt.Make (typeof<OutletAttribute>.GetUnitConstructor ())
module TypeBuilder =
let typeMap (proxy:ProxiedUiKitObject) =
let getTypeMap (assembly:Assembly) (proxy:ProxiedUiKitObject) =
//TODO: Expand this to also search in user assemblies
let hasRegisterAttribute (typ:Type) =
query {for ca in typ.CustomAttributes do
exists (ca.AttributeType = typeof<RegisterAttribute>) }
exists (ca.AttributeType = assembly.GetType("Foundation.RegisterAttribute", true)) }
let hasMatchingAttributeName (typ:Type) proxyClassName =
query {for ca in typ.CustomAttributes do
@ -51,7 +40,6 @@ module TypeBuilder =
| [:? string as name; :? bool as _isWrapper] -> name = proxyClassName
| _ -> false) }
let monotouchAssembly = typeof<UIButton>.Assembly
//debug
// let allTypes =
// query { for typ in monotouchAssembly.ExportedTypes do
@ -66,7 +54,7 @@ module TypeBuilder =
//
// let justRegister =
// typeAndCa |> Array.map (fun (a,b) -> match b.ConstructorArguments |> Seq.map (fun ca -> ca.Value) |> Seq.toList with
// | [:? string as name] -> name
// toList | [:? string as name] -> name
// | [:? string as name; :? bool as _isWrapper] -> name
// | _-> "invalid") |> Array.sort
//
@ -75,39 +63,48 @@ module TypeBuilder =
//------------------------------
let matches =
query { for typ in monotouchAssembly.ExportedTypes do
query { for typ in assembly.ExportedTypes do
where ((hasRegisterAttribute typ) && (hasMatchingAttributeName typ proxy.CodeGenerationBaseClass))
select typ
exactlyOne }
matches
//TODO add option for ObservableSource<NSObject>, potentially unneeded as outlets exposes this with observable...
let buildAction (action:ActionConnection) =
let buildAction (assembly:Assembly) (action:ActionConnection) =
//create a backing field fand property or the action
let actionAttributeType = assembly.GetType("Foundation.ActionAttribute", true)
let actionField, actionProperty =
ProvidedTypes.ProvidedPropertyWithField (Sanitise.makeFieldName action.Selector,
Sanitise.makePascalCase action.Selector,
typeof<Action<NSObject>>)
typeof<option<obj -> unit>>)
let actionBinding =
ProvidedMethod(methodName = Sanitise.makeSelectorMethodName action.Selector,
parameters = [ProvidedParameter("sender", typeof<NSObject>)],
parameters = [ProvidedParameter("sender", typeof<obj>) ],
returnType = typeof<Void>,
InvokeCode = fun args -> let instance = Expr.Cast<Action<NSObject>> (Expr.FieldGet (args.[0], actionField))
<@@ if %instance <> null then (%instance).Invoke(%%args.[1]) @@>)
InvokeCode = fun args ->
let callback = Expr.FieldGet(args.[0], actionField)
let arg = args.[1]
<@@ %%callback |> Option.iter (fun f -> f %%arg) @@>)
actionBinding.AddCustomAttribute (Attributes.MakeActionAttributeData(action.Selector))
actionBinding.AddCustomAttribute
(CustomAttributeDataExt.Make (actionAttributeType.GetConstructor (typeof<string>),
[| CustomAttributeTypedArgument (actionAttributeType, action.Selector) |]))
actionBinding.SetMethodAttrs MethodAttributes.Private
[actionField :> MemberInfo; actionProperty :> _; actionBinding :> _]
[actionField :> MemberInfo
actionProperty :> _
actionBinding :> _]
let buildOutlet (vc:ProxiedViewController, outlet:Outlet) =
let buildOutlet (assembly:Assembly) (vc:ProxiedViewController, outlet:Outlet) =
let uiProxy = vc.Storyboard.FindById (outlet.Destination) :?> ProxiedUiKitObject
let outletField, outletProperty =
ProvidedTypes.ProvidedPropertyWithField (Sanitise.makeFieldName outlet.Property,
Sanitise.cleanTrailing outlet.Property,
typeMap uiProxy)
outletProperty.AddCustomAttribute <| Attributes.MakeOutletAttributeData()
getTypeMap assembly uiProxy)
outletProperty.AddCustomAttribute <| CustomAttributeDataExt.Make (assembly.GetType("Foundation.OutletAttribute", true).GetUnitConstructor ())
//Add the property and backing fields to the view controller
outletField, outletProperty
@ -133,10 +130,10 @@ module TypeBuilder =
else buildReleaseOutletsExpr instance fields
| _ -> invalidOp "Too many arguments")
let buildController (vcs: ProxiedViewController seq) isAbstract addUnitCtor register (config:TypeProviderConfig) =
let buildController (assembly:Assembly) (vcs: ProxiedViewController seq) isAbstract addUnitCtor register (config:TypeProviderConfig) =
//get the real type of the controller proxy
let vcsTypes = vcs |> Seq.map typeMap
let vcsTypes = vcs |> Seq.map (getTypeMap assembly)
let vc = Seq.head vcs
let controllerType = Seq.head vcsTypes
let className = if isAbstract then vc.CustomClass + "Base" else vc.CustomClass
@ -164,13 +161,13 @@ module TypeBuilder =
| Some ctor -> let emptyctor = ProvidedConstructor([], InvokeCode = Expr.emptyInvoke, BaseConstructorCall = fun args -> ctor, args)
providedController.AddMember (emptyctor)
//If register set and nor isAbstract, then automatically registers using [<Register>]
//If register set and not isAbstract, then automatically registers using [<Register>]
if register && not isAbstract then
let register = Attributes.MakeRegisterAttributeData customClass
let register = CustomAttributeDataExt.Make (assembly.GetType("Foundation.RegisterAttribute", true).GetConstructor (typeof<string>), [| CustomAttributeTypedArgument (typeof<string>, customClass) |])
providedController.AddCustomAttribute (register)
//Add a little helper that has the "CustomClass" available, this can be used to register without knowing the CustomClass
providedController.AddMember (ProvidedLiteralField("CustomClass", typeof<string>, customClass))
providedController.AddMember (mkProvidedLiteralField "CustomClass" customClass)
//actions
let actionProvidedMembers =
@ -184,7 +181,7 @@ module TypeBuilder =
yield! subviews
|> Seq.collect (fun sv -> sv.Actions)
|> Seq.distinct
|> Seq.collect buildAction]
|> Seq.collect (buildAction assembly)]
providedController.AddMembers actionProvidedMembers
@ -194,7 +191,7 @@ module TypeBuilder =
for outlet in vc.Outlets do
yield vc, outlet ]
|> List.distinctBy (fun (_, outlet) -> outlet.Property)
|> List.map buildOutlet
|> List.map (buildOutlet assembly)
for (field, property) in providedOutlets do
providedController.AddMembers [field :> MemberInfo; property :> _]

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

@ -1,4 +1,4 @@
namespace Xamarin.iOSProviders
namespace Xamarin.UIProviders.DesignTime
open System
open System.Collections.Generic
open System.IO

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

@ -1,4 +1,4 @@
namespace Xamarin.iOSProviders
namespace Xamarin.UIProviders.DesignTime
open System
open System.Diagnostics

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

@ -134,7 +134,7 @@ module internal Misc =
#else
{ new CustomAttributeData() with
#endif
member __.Constructor = typeof<System.ObsoleteAttribute>.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1)
member __.Constructor = typeof<System.ObsoleteAttribute>.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 2)
member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof<string>, message) ; CustomAttributeTypedArgument(typeof<bool>, isError) |]
member __.NamedArguments = upcast [| |] }
@ -494,7 +494,7 @@ module internal Misc =
else
Some (args.[1], args.[1])
)
|> Seq.item (n - 1)
|> Seq.nth (n - 1)
let adaptMethod = getFastFuncType args resultType
let adapted = E.Call(adaptMethod, [loop applicable])
@ -2733,4 +2733,4 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list<Provided
let bytes = System.IO.File.ReadAllBytes assembly.ManifestModule.FullyQualifiedName
GlobalProvidedAssemblyElementsTable.theTable.[assembly] <- Lazy<_>.CreateFromValue bytes
bytes
#endif
#endif

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

@ -464,4 +464,4 @@ type TypeProviderForNamespaces =
[<CLIEvent>]
member Disposing : IEvent<EventHandler,EventArgs>
interface ITypeProvider
interface ITypeProvider

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

@ -1,4 +1,4 @@
namespace iOSDesignerTypeProvider
namespace Xamarin.UIProviders.DesignTime
open System
open System.Collections.Generic
@ -43,12 +43,19 @@ module ProvidedTypes =
let field = ProvidedField( fieldName, typ)
field.SetFieldAttributes FieldAttributes.Private
let property = ProvidedProperty(propertyName, typ, defaultArg parameters [])
property.GetterCode <- fun args -> Expr.FieldGet(args.[0], field)
property.SetterCode <- fun args -> Expr.FieldSet(args.[0], field, args.[1])
field,property
let mkProvidedLiteralField name (value: 'a) =
ProvidedLiteralField(name, typeof<'a>, value)
let mkProvidedStaticParameter name (value: 'a) =
ProvidedStaticParameter(name, typeof<'a>, value)
module Expr =
/// This helper makes working with Expr.Let a little easier and safer

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

@ -1,74 +1,78 @@
<?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)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DD17E7B0-6EE1-4862-80F8-E0CAB67D6137}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>iOSDesignerTypeProvider</RootNamespace>
<AssemblyName>Xamarin.iOSProviders</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<PlatformTarget></PlatformTarget>
<Externalconsole>true</Externalconsole>
<CustomCommands>
<CustomCommands>
<Command type="Execute" command="&quot;/Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/XamarinStudio.exe&quot; --no-redirect" workingdir="" />
</CustomCommands>
</CustomCommands>
<Optimize>false</Optimize>
<Tailcalls>false</Tailcalls>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<PlatformTarget></PlatformTarget>
<ConsolePause>false</ConsolePause>
<Tailcalls>true</Tailcalls>
<DefineConstants></DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Numerics" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="MonoTouch.Design">
<HintPath>\Applications\Xamarin Studio.app\Contents\Resources\lib\monodevelop\AddIns\MonoDevelop.IPhone\MonoTouch.Design.dll</HintPath>
</Reference>
<Reference Include="MonoTouch.Design.Client">
<HintPath>\Applications\Xamarin Studio.app\Contents\Resources\lib\monodevelop\AddIns\MonoDevelop.IPhone\MonoTouch.Design.Client.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="ExtCore">
<HintPath>..\packages\ExtCore.0.8.45\lib\net45\ExtCore.dll</HintPath>
</Reference>
<Reference Include="Xamarin.iOS">
<HintPath>\Library\Frameworks\Xamarin.iOS.framework\Versions\Current\lib\64bits\Xamarin.iOS.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.fs" />
<Compile Include="ProvidedTypes.fsi" />
<Compile Include="ProvidedTypes.fs" />
<Compile Include="ProvidedTypesHelpers.fs" />
<Compile Include="Observable.fs" />
<Compile Include="IO.fs" />
<Compile Include="Debug.fs" />
<Compile Include="Designtime.fs" />
<Compile Include="iOSDesignerProvider.fs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets" />
<ItemGroup>
<None Include="packages.config" />
<None Include="Script.fsx" />
</ItemGroup>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DD17E7B0-6EE1-4862-80F8-E0CAB67D6137}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Xamarin.UIProviders.DesignTime</RootNamespace>
<AssemblyName>Xamarin.UIProviders.DesignTime</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<OutputPath>..\Build\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<PlatformTarget></PlatformTarget>
<Externalconsole>true</Externalconsole>
<CustomCommands>
<CustomCommands>
<Command type="Execute" command="../../../monodevelop/main/build/bin/MonoDevelop.exe --no-redirect" workingdir="../../../monodevelop/main/build/" />
</CustomCommands>
</CustomCommands>
<Optimize>false</Optimize>
<Tailcalls>false</Tailcalls>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\Build\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<PlatformTarget></PlatformTarget>
<ConsolePause>false</ConsolePause>
<Tailcalls>true</Tailcalls>
<DefineConstants></DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Numerics" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="MonoTouch.Design">
<HintPath>\Applications\Xamarin Studio.app\Contents\Resources\lib\monodevelop\AddIns\MonoDevelop.IPhone\MonoTouch.Design.dll</HintPath>
</Reference>
<Reference Include="MonoTouch.Design.Client">
<HintPath>\Applications\Xamarin Studio.app\Contents\Resources\lib\monodevelop\AddIns\MonoDevelop.IPhone\MonoTouch.Design.Client.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="ExtCore">
<HintPath>..\packages\ExtCore.0.8.45\lib\net45\ExtCore.dll</HintPath>
</Reference>
<Reference Include="Xamarin.iOS">
<HintPath>\Library\Frameworks\Xamarin.iOS.framework\Versions\Current\lib\64bits\Xamarin.iOS.dll</HintPath>
</Reference>
<Reference Include="Unquote">
<HintPath>..\packages\Unquote.3.1.1\lib\net45\Unquote.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.fs" />
<Compile Include="ProvidedTypes.fsi" />
<Compile Include="ProvidedTypes.fs" />
<Compile Include="ProvidedTypesHelpers.fs" />
<Compile Include="Observable.fs" />
<Compile Include="IO.fs" />
<Compile Include="DebugProvidedTypes.fs" />
<Compile Include="Designtime.fs" />
<Compile Include="iOSDesignerProvider.fs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets" />
<ItemGroup>
<None Include="packages.config" />
<None Include="Script.fsx" />
<None Include="Debug.fs" />
</ItemGroup>
</Project>

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

@ -1,4 +1,4 @@
namespace Xamarin.iOSProviders
namespace Xamarin.UIProviders.DesignTime
open System
open System.Collections.Generic
@ -8,24 +8,37 @@ open System.Xml.Linq
open System.Reflection
open ProviderImplementation.ProvidedTypes
open Microsoft.FSharp.Core.CompilerServices
open MonoTouch.Design
open MonoTouch.Design
open ProvidedTypes
[<TypeProvider>]
type iOSDesignerProvider(config: TypeProviderConfig) as this =
inherit TypeProviderForNamespaces()
//TODO figure out how to find this properly, must be a env var or something.
let assemblybase = "/Developer/MonoTouch/usr/lib/mono/Xamarin.iOS/"
let baseFolder ="/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono"
let assemblybase, assembly =
match Path.GetFileName config.RuntimeAssembly with
| a when a = "Xamarin.UIProvider.TVOSRuntime.dll" ->
let folder = Path.Combine (baseFolder, "Xamarin.TVOS")
let assembly = Path.Combine(folder, "Xamarin.TVOS.dll")
folder, Assembly.LoadFrom assembly
| a when a = "Xamarin.UIProvider.iOSRuntime.dll" ->
let folder = Path.Combine (baseFolder, "Xamarin.iOS")
let assembly = Path.Combine(folder, "Xamarin.iOS.dll")
folder, Assembly.LoadFrom assembly
| other -> failwithf "Uknown runtime provider assembly: %s" other
do this.RegisterProbingFolder assemblybase
let ns = "Xamarin.iOSProviders"
let ns = "Xamarin"
let asm = Assembly.GetExecutingAssembly()
let rootType = ProvidedTypeDefinition(asm, ns, "UIProvider", None, HideObjectMethods = true, IsErased = false)
let rootType = ProvidedTypeDefinition(asm, ns, "UIProvider", None, HideObjectMethods=true, IsErased=false)
let watchedFiles = ResizeArray()
let buildTypes typeName (parameterValues: obj []) =
let allStoryBoards = Directory.EnumerateFiles ( config.ResolutionFolder, "*.storyboard", SearchOption.AllDirectories)
let register = parameterValues.[0] :?> bool
let isAbstract = parameterValues.[1] :?> bool
let addUnitCtor = parameterValues.[2] :?> bool
@ -57,7 +70,7 @@ type iOSDesignerProvider(config: TypeProviderConfig) as this =
[ for sc in groupedViewControllers do
let vcs = sc.AsEnumerable()
// if not (String.IsNullOrWhiteSpace sc.ViewController.CustomClass) then
yield TypeBuilder.buildController vcs isAbstract addUnitCtor register config ]
yield TypeBuilder.buildController assembly vcs isAbstract addUnitCtor register config ]
//Add the types to the container
container.AddMembers generatedTypes
@ -72,12 +85,13 @@ type iOSDesignerProvider(config: TypeProviderConfig) as this =
assembly.AddTypes [container]
container
do rootType.DefineStaticParameters([ProvidedStaticParameter ("AddRegisteration", typeof<bool>, false)
ProvidedStaticParameter ("AbstractController", typeof<bool>, true)
ProvidedStaticParameter ("AddDefaultConstructor", typeof<bool>, false)], buildTypes)
do rootType.DefineStaticParameters(
[mkProvidedStaticParameter "AddRegisteration" false
mkProvidedStaticParameter "AbstractController" true
mkProvidedStaticParameter "AddDefaultConstructor" false], buildTypes)
this.AddNamespace(ns, [rootType])
this.Disposing.Add (fun _ -> for disposer in watchedFiles do disposer.Dispose ())
[<assembly:TypeProviderAssembly()>]
do()
//[<assembly:TypeProviderAssembly()>]
//do()

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

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ExtCore" version="0.8.45" targetFramework="net45" />
<package id="FSharp.TypeProviders.StarterPack" version="1.1.3.88" targetFramework="net45" />
<package id="Unquote" version="3.1.1" targetFramework="net45" />
</packages>