├── Research ├── HelloObjC.app │ └── Contents │ │ ├── PkgInfo │ │ ├── MacOS │ │ └── HelloObjC │ │ ├── Resources │ │ └── Base.lproj │ │ │ ├── Main.storyboardc │ │ │ ├── Info.plist │ │ │ ├── BYZ-38-t0r-view-8bC-Xf-vdC.nib │ │ │ └── UIViewController-BYZ-38-t0r.nib │ │ │ └── LaunchScreen.storyboardc │ │ │ ├── Info.plist │ │ │ ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib │ │ │ └── UIViewController-01J-lp-oVM.nib │ │ ├── Info.plist │ │ └── _CodeSignature │ │ └── CodeResources ├── Hello.macOS │ ├── Assets.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── AppIcon-128.png │ │ │ ├── AppIcon-16.png │ │ │ ├── AppIcon-256.png │ │ │ ├── AppIcon-32.png │ │ │ ├── AppIcon-512.png │ │ │ ├── AppIcon-128@2x.png │ │ │ ├── AppIcon-16@2x.png │ │ │ ├── AppIcon-256@2x.png │ │ │ ├── AppIcon-32@2x.png │ │ │ ├── AppIcon-512@2x.png │ │ │ └── Contents.json │ ├── Entitlements.plist │ ├── Main.cs │ ├── ViewController.designer.cs │ ├── AppDelegate.cs │ ├── ViewController.cs │ ├── Info.plist │ └── Hello.macOS.csproj ├── HelloForms │ ├── AssemblyInfo.cs │ ├── Models │ │ └── Item.cs │ ├── Views │ │ ├── AboutPage.xaml.cs │ │ ├── MainPage.xaml.cs │ │ ├── ItemDetailPage.xaml │ │ ├── NewItemPage.xaml │ │ ├── ItemDetailPage.xaml.cs │ │ ├── NewItemPage.xaml.cs │ │ ├── MainPage.xaml │ │ ├── ItemsPage.xaml.cs │ │ ├── ItemsPage.xaml │ │ └── AboutPage.xaml │ ├── ViewModels │ │ ├── ItemDetailViewModel.cs │ │ ├── AboutViewModel.cs │ │ ├── ItemsViewModel.cs │ │ └── BaseViewModel.cs │ ├── Services │ │ ├── IDataStore.cs │ │ └── MockDataStore.cs │ ├── App.xaml │ ├── HelloForms.csproj │ └── App.xaml.cs ├── HelloObjC │ ├── HelloObjC │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── ViewController.h │ │ ├── AppDelegate.h │ │ ├── SceneDelegate.h │ │ ├── HelloObjC.entitlements │ │ ├── ViewController.m │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Info.plist │ │ ├── SceneDelegate.m │ │ └── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ └── HelloObjC.xcodeproj │ │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── HelloForms.iOS │ ├── Resources │ │ ├── Default.png │ │ ├── tab_about.png │ │ ├── tab_feed.png │ │ ├── Default@2x.png │ │ ├── tab_feed@2x.png │ │ ├── tab_feed@3x.png │ │ ├── tab_about@2x.png │ │ ├── tab_about@3x.png │ │ ├── xamarin_logo.png │ │ ├── Default-568h@2x.png │ │ ├── Default-Portrait.png │ │ ├── xamarin_logo@2x.png │ │ ├── xamarin_logo@3x.png │ │ ├── Default-Portrait@2x.png │ │ └── LaunchScreen.storyboard │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Icon20.png │ │ │ ├── Icon29.png │ │ │ ├── Icon40.png │ │ │ ├── Icon58.png │ │ │ ├── Icon60.png │ │ │ ├── Icon76.png │ │ │ ├── Icon80.png │ │ │ ├── Icon87.png │ │ │ ├── Icon1024.png │ │ │ ├── Icon120.png │ │ │ ├── Icon152.png │ │ │ ├── Icon167.png │ │ │ ├── Icon180.png │ │ │ └── Contents.json │ ├── Entitlements.plist │ ├── Main.cs │ ├── AppDelegate.cs │ ├── Info.plist │ ├── Properties │ │ └── AssemblyInfo.cs │ └── HelloForms.iOS.csproj ├── Hello.iOS │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Icon20.png │ │ │ ├── Icon29.png │ │ │ ├── Icon40.png │ │ │ ├── Icon58.png │ │ │ ├── Icon60.png │ │ │ ├── Icon76.png │ │ │ ├── Icon80.png │ │ │ ├── Icon87.png │ │ │ ├── Icon1024.png │ │ │ ├── Icon120.png │ │ │ ├── Icon152.png │ │ │ ├── Icon167.png │ │ │ ├── Icon180.png │ │ │ └── Contents.json │ ├── Entitlements.plist │ ├── ViewController.designer.cs │ ├── Main.cs │ ├── ViewController.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── LaunchScreen.storyboard │ ├── Main.storyboard │ ├── AppDelegate.cs │ ├── Info.plist │ ├── SceneDelegate.cs │ ├── Resources │ │ └── LaunchScreen.xib │ └── Hello.iOS.csproj ├── macOS-main.m ├── MyBuild │ ├── macmain.m │ ├── catmain.m │ ├── build.sh │ └── mcat.sh ├── compile_maccat_mono.sh ├── iOS-Sim-main.m ├── iOS-Device-main.m ├── ObjC-BuildLog.txt └── CatResearch.sln ├── maccat.sh ├── Icon.jpg ├── .github └── FUNDING.yml ├── global.json ├── test_build_task.sh ├── Sdk ├── maccat.csproj ├── maccat.sln ├── catmain.m ├── Program.cs ├── Terminal.cs ├── FixEnums.fsx └── Marzipanify.cs ├── Praeclarum.MacCatalyst ├── Praeclarum.MacCatalyst.BuildTask.csproj ├── Praeclarum.MacCatalyst.targets └── BuildTask.cs ├── LICENSE.txt ├── Praeclarum.MacCatalyst.nuspec ├── Makefile ├── Catalyst.sln ├── README.md ├── .editorconfig └── .gitignore /Research/HelloObjC.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /maccat.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | dotnet maccat.dll $@ 4 | -------------------------------------------------------------------------------- /Icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Icon.jpg -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [praeclarum] 4 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "3.1.100", 4 | "rollForward": "latestFeature" 5 | } 6 | } -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Research/HelloForms/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms.Xaml; 2 | 3 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)] -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/Default.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_about.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_feed.png -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/MacOS/HelloObjC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/MacOS/HelloObjC -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/Default@2x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_feed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_feed@2x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_feed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_feed@3x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_about@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_about@2x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/tab_about@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/tab_about@3x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/xamarin_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/xamarin_logo.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/Default-568h@2x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/Default-Portrait.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/xamarin_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/xamarin_logo@2x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/xamarin_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/xamarin_logo@3x.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Resources/Default-Portrait@2x.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/Info.plist -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/Info.plist -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Research/Hello.macOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/praeclarum/Praeclarum.MacCatalyst/HEAD/Research/HelloObjC.app/Contents/Resources/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import 9 | 10 | @interface ViewController : UIViewController 11 | 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Research/HelloForms/Models/Item.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace HelloForms.Models 4 | { 5 | public class Item 6 | { 7 | public string Id { get; set; } 8 | public string Text { get; set; } 9 | public string Description { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import 9 | 10 | @interface AppDelegate : UIResponder 11 | 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Research/Hello.macOS/Main.cs: -------------------------------------------------------------------------------- 1 | using AppKit; 2 | 3 | namespace Hello.macOS 4 | { 5 | static class MainClass 6 | { 7 | static void Main(string[] args) 8 | { 9 | NSApplication.Init(); 10 | NSApplication.Main(args); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import 9 | 10 | @interface SceneDelegate : UIResponder 11 | 12 | @property (strong, nonatomic) UIWindow * window; 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/AboutPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using Xamarin.Forms; 4 | using Xamarin.Forms.Xaml; 5 | 6 | namespace HelloForms.Views 7 | { 8 | public partial class AboutPage : ContentPage 9 | { 10 | public AboutPage() 11 | { 12 | InitializeComponent(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/HelloObjC.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Research/HelloForms/ViewModels/ItemDetailViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using HelloForms.Models; 4 | 5 | namespace HelloForms.ViewModels 6 | { 7 | public class ItemDetailViewModel : BaseViewModel 8 | { 9 | public Item Item { get; set; } 10 | public ItemDetailViewModel(Item item = null) 11 | { 12 | Title = item?.Text; 13 | Item = item; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import "ViewController.h" 9 | 10 | @interface ViewController () 11 | 12 | @end 13 | 14 | @implementation ViewController 15 | 16 | - (void)viewDidLoad { 17 | [super viewDidLoad]; 18 | // Do any additional setup after loading the view. 19 | } 20 | 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /test_build_task.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | set -e 5 | 6 | 7 | PROJDIR=$1 8 | 9 | dotnet build Praeclarum.MacCatalyst/Praeclarum.MacCatalyst.BuildTask.csproj 10 | cp Praeclarum.MacCatalyst/bin/Debug/netstandard2.1/Praeclarum.MacCatalyst.BuildTask.dll $PROJDIR 11 | cp Praeclarum.MacCatalyst/bin/Debug/netstandard2.1/Praeclarum.MacCatalyst.targets $PROJDIR 12 | 13 | cd $PROJDIR 14 | touch AppDelegate.cs 15 | msbuild 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Research/Hello.iOS/ViewController.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Visual Studio from the outlets and 4 | // actions declared in your storyboard file. 5 | // Manual changes to this file will not be maintained. 6 | // 7 | using Foundation; 8 | using System; 9 | using System.CodeDom.Compiler; 10 | using UIKit; 11 | 12 | namespace Hello.iOS 13 | { 14 | [Register("ViewController")] 15 | partial class ViewController 16 | { 17 | } 18 | } -------------------------------------------------------------------------------- /Research/HelloForms/Views/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using Xamarin.Forms; 4 | using Xamarin.Forms.Xaml; 5 | 6 | namespace HelloForms.Views 7 | { 8 | public partial class MainPage : TabbedPage 9 | { 10 | public MainPage() 11 | { 12 | InitializeComponent(); 13 | Console.WriteLine (new SkiaSharp.Views.Forms.SKCanvasView ()); 14 | //Console.WriteLine (Microsoft.AppCenter.AppCenter.SdkVersion); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Research/HelloForms/Services/IDataStore.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | 5 | namespace HelloForms.Services 6 | { 7 | public interface IDataStore 8 | { 9 | Task AddItemAsync(T item); 10 | Task UpdateItemAsync(T item); 11 | Task DeleteItemAsync(string id); 12 | Task GetItemAsync(string id); 13 | Task> GetItemsAsync(bool forceRefresh = false); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | 3 | namespace Hello.iOS 4 | { 5 | public class Application 6 | { 7 | // This is the main entry point of the application. 8 | static void Main(string[] args) 9 | { 10 | System.Console.WriteLine ("Starting Hello.iOS"); 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, "AppDelegate"); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Research/macOS-main.m: -------------------------------------------------------------------------------- 1 | #define MONOMAC 1 2 | #include 3 | #import 4 | #import 5 | 6 | 7 | 8 | extern "C" int xammac_setup () 9 | { 10 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 11 | xamarin_disable_lldb_attach = true; 12 | 13 | xamarin_create_classes (); 14 | setenv ("MONO_GC_PARAMS", "major=marksweep", 1); 15 | xamarin_supports_dynamic_registration = TRUE; 16 | xamarin_mac_modern = TRUE; 17 | return 0; 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Research/HelloForms/ViewModels/AboutViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Input; 3 | using Xamarin.Essentials; 4 | using Xamarin.Forms; 5 | 6 | namespace HelloForms.ViewModels 7 | { 8 | public class AboutViewModel : BaseViewModel 9 | { 10 | public AboutViewModel() 11 | { 12 | Title = "About"; 13 | OpenWebCommand = new Command(async () => await Browser.OpenAsync("https://xamarin.com")); 14 | } 15 | 16 | public ICommand OpenWebCommand { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /Research/MyBuild/macmain.m: -------------------------------------------------------------------------------- 1 | #define MONOMAC 1 2 | #include 3 | #import 4 | #import 5 | 6 | 7 | 8 | extern "C" int xammac_setup () 9 | { 10 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 11 | xamarin_disable_lldb_attach = true; 12 | 13 | xamarin_create_classes (); 14 | setenv ("MONO_GC_PARAMS", "major=marksweep", 1); 15 | xamarin_supports_dynamic_registration = TRUE; 16 | xamarin_mac_modern = TRUE; 17 | return 0; 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Research/Hello.macOS/ViewController.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | 9 | namespace Hello.macOS 10 | { 11 | [Register("ViewController")] 12 | partial class ViewController 13 | { 14 | void ReleaseDesignerOutlets() 15 | { 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import 9 | #import "AppDelegate.h" 10 | 11 | int main(int argc, char * argv[]) { 12 | NSString * appDelegateClassName; 13 | @autoreleasepool { 14 | // Setup code that might create autoreleased objects goes here. 15 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 16 | } 17 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 18 | } 19 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | 8 | namespace HelloForms.iOS 9 | { 10 | public class Application 11 | { 12 | // This is the main entry point of the application. 13 | static void Main(string[] args) 14 | { 15 | // if you want to use a different Application Delegate class from "AppDelegate" 16 | // you can specify it here. 17 | UIApplication.Main(args, null, "AppDelegate"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/ItemDetailPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /Research/compile_maccat_mono.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | set -x 5 | 6 | cd /Users/fak/Projects/mono 7 | 8 | export XCODE_DIR=/Applications/Xcode_12.0.0.app/Contents/Developer 9 | export MACOS_VERSION=10.15 10 | 11 | # Configure 12 | 13 | echo "ENABLE_MACCAT=1" > sdks/Make.config 14 | rm sdks/builds/.stamp* && rm -r sdks/builds/maccat-mac64-release && rm -r sdks/builds/maccat-mac64-release.config.cache 15 | make -C sdks/builds configure-maccat 16 | 17 | # make V=1 -C sdks/builds build-maccat 18 | make -j20 -C sdks/builds build-maccat 19 | 20 | make -C sdks/builds archive-maccat 21 | 22 | -------------------------------------------------------------------------------- /Sdk/maccat.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | enable 7 | true 8 | preview 9 | true 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Research/Hello.macOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using AppKit; 2 | using Foundation; 3 | 4 | namespace Hello.macOS 5 | { 6 | [Register("AppDelegate")] 7 | public class AppDelegate : NSApplicationDelegate 8 | { 9 | public AppDelegate() 10 | { 11 | } 12 | 13 | public override void DidFinishLaunching(NSNotification notification) 14 | { 15 | // Insert code here to initialize your application 16 | } 17 | 18 | public override void WillTerminate(NSNotification notification) 19 | { 20 | // Insert code here to tear down your application 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Research/HelloForms/App.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #2196F3 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Research/HelloForms/HelloForms.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | true 6 | 7 | 8 | 9 | portable 10 | true 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Research/HelloForms/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Xaml; 4 | using HelloForms.Services; 5 | using HelloForms.Views; 6 | 7 | namespace HelloForms 8 | { 9 | public partial class App : Application 10 | { 11 | 12 | public App() 13 | { 14 | InitializeComponent(); 15 | 16 | DependencyService.Register(); 17 | MainPage = new MainPage(); 18 | } 19 | 20 | protected override void OnStart() 21 | { 22 | } 23 | 24 | protected override void OnSleep() 25 | { 26 | } 27 | 28 | protected override void OnResume() 29 | { 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Research/Hello.macOS/ViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using AppKit; 4 | using Foundation; 5 | 6 | namespace Hello.macOS 7 | { 8 | public partial class ViewController : NSViewController 9 | { 10 | public ViewController(IntPtr handle) : base(handle) 11 | { 12 | } 13 | 14 | public override void ViewDidLoad() 15 | { 16 | base.ViewDidLoad(); 17 | 18 | // Do any additional setup after loading the view. 19 | } 20 | 21 | public override NSObject RepresentedObject 22 | { 23 | get 24 | { 25 | return base.RepresentedObject; 26 | } 27 | set 28 | { 29 | base.RepresentedObject = value; 30 | // Update the view, if already loaded. 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/NewItemPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/ItemDetailPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using Xamarin.Forms; 4 | using Xamarin.Forms.Xaml; 5 | 6 | using HelloForms.Models; 7 | using HelloForms.ViewModels; 8 | 9 | namespace HelloForms.Views 10 | { 11 | public partial class ItemDetailPage : ContentPage 12 | { 13 | ItemDetailViewModel viewModel; 14 | 15 | public ItemDetailPage(ItemDetailViewModel viewModel) 16 | { 17 | InitializeComponent(); 18 | 19 | BindingContext = this.viewModel = viewModel; 20 | } 21 | 22 | public ItemDetailPage() 23 | { 24 | InitializeComponent(); 25 | 26 | var item = new Item 27 | { 28 | Text = "Item 1", 29 | Description = "This is an item description." 30 | }; 31 | 32 | viewModel = new ItemDetailViewModel(item); 33 | BindingContext = viewModel; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Praeclarum.MacCatalyst/Praeclarum.MacCatalyst.BuildTask.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.1 5 | true 6 | enable 7 | true 8 | preview 9 | true 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | PreserveNewest 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/NewItemPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | using HelloForms.Models; 8 | 9 | namespace HelloForms.Views 10 | { 11 | public partial class NewItemPage : ContentPage 12 | { 13 | public Item Item { get; set; } 14 | 15 | public NewItemPage() 16 | { 17 | InitializeComponent(); 18 | 19 | Item = new Item 20 | { 21 | Text = "Item name", 22 | Description = "This is an item description." 23 | }; 24 | 25 | BindingContext = this; 26 | } 27 | 28 | async void Save_Clicked(object sender, EventArgs e) 29 | { 30 | MessagingCenter.Send(this, "AddItem", Item); 31 | await Navigation.PopModalAsync(); 32 | } 33 | 34 | async void Cancel_Clicked(object sender, EventArgs e) 35 | { 36 | await Navigation.PopModalAsync(); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Sdk/maccat.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "maccat", "maccat.csproj", "{D86CF60D-FEA8-401A-8F7C-979EDED495B1}" 5 | EndProject 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{182390EB-E7CD-44CD-8C8E-AF1EC95D3CEE}" 7 | ProjectSection(SolutionItems) = preProject 8 | ..\README.md = ..\README.md 9 | EndProjectSection 10 | EndProject 11 | Global 12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 | Debug|Any CPU = Debug|Any CPU 14 | Release|Any CPU = Release|Any CPU 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {D86CF60D-FEA8-401A-8F7C-979EDED495B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 18 | {D86CF60D-FEA8-401A-8F7C-979EDED495B1}.Debug|Any CPU.Build.0 = Debug|Any CPU 19 | {D86CF60D-FEA8-401A-8F7C-979EDED495B1}.Release|Any CPU.ActiveCfg = Release|Any CPU 20 | {D86CF60D-FEA8-401A-8F7C-979EDED495B1}.Release|Any CPU.Build.0 = Release|Any CPU 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /Research/Hello.macOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleName 6 | Hello.macOS 7 | CFBundleIdentifier 8 | com.companyname.Hello-macOS 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 1 13 | LSMinimumSystemVersion 14 | 10.15 15 | CFBundleDevelopmentRegion 16 | en 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | NSHumanReadableCopyright 24 | 25 | NSPrincipalClass 26 | NSApplication 27 | NSMainStoryboardFile 28 | Main 29 | XSAppIconAssets 30 | Assets.xcassets/AppIcon.appiconset 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/MainPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Frank A. Krueger 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /Research/Hello.iOS/ViewController.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | using System; 3 | using UIKit; 4 | 5 | namespace Hello.iOS 6 | { 7 | public partial class ViewController : UIViewController 8 | { 9 | public ViewController(IntPtr handle) : base(handle) 10 | { 11 | Console.WriteLine ("Created ViewController"); 12 | } 13 | 14 | public override void ViewDidLoad() 15 | { 16 | base.ViewDidLoad(); 17 | Console.WriteLine ("ViewController ViewLoaded"); 18 | // Perform any additional setup after loading the view, typically from a nib. 19 | var label = new UILabel { 20 | Text = "Hello James from Mac Catalyst", 21 | Font = UIFont.SystemFontOfSize (44), 22 | }; 23 | label.Frame = View.Bounds; 24 | label.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions; 25 | label.BackgroundColor = UIColor.Blue; 26 | View.AddSubview (label); 27 | } 28 | 29 | public override void DidReceiveMemoryWarning() 30 | { 31 | base.DidReceiveMemoryWarning(); 32 | // Release any cached data, images, etc that aren't in use. 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Research/HelloForms.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | 8 | namespace HelloForms.iOS 9 | { 10 | // The UIApplicationDelegate for the application. This class is responsible for launching the 11 | // User Interface of the application, as well as listening (and optionally responding) to 12 | // application events from iOS. 13 | [Register("AppDelegate")] 14 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 15 | { 16 | // 17 | // This method is invoked when the application has loaded and is ready to run. In this 18 | // method you should instantiate the window, load the UI into it and then make the window 19 | // visible. 20 | // 21 | // You have 17 seconds to return from this method, or iOS will terminate your application. 22 | // 23 | public override bool FinishedLaunching(UIApplication app, NSDictionary options) 24 | { 25 | global::Xamarin.Forms.Forms.Init(); 26 | LoadApplication(new App()); 27 | 28 | return base.FinishedLaunching(app, options); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIDeviceFamily 6 | 7 | 1 8 | 2 9 | 10 | UISupportedInterfaceOrientations 11 | 12 | UIInterfaceOrientationPortrait 13 | UIInterfaceOrientationLandscapeLeft 14 | UIInterfaceOrientationLandscapeRight 15 | 16 | UISupportedInterfaceOrientations~ipad 17 | 18 | UIInterfaceOrientationPortrait 19 | UIInterfaceOrientationPortraitUpsideDown 20 | UIInterfaceOrientationLandscapeLeft 21 | UIInterfaceOrientationLandscapeRight 22 | 23 | MinimumOSVersion 24 | 13.0 25 | CFBundleDisplayName 26 | HelloForms 27 | CFBundleIdentifier 28 | com.companyname.HelloForms 29 | CFBundleVersion 30 | 1.0 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | CFBundleName 34 | HelloForms 35 | XSAppIconAssets 36 | Assets.xcassets/AppIcon.appiconset 37 | 38 | 39 | -------------------------------------------------------------------------------- /Praeclarum.MacCatalyst.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Praeclarum.MacCatalyst 5 | 1.0-beta3 6 | Praeclarum.MacCatalyst 7 | praeclarum 8 | praeclarum 9 | LICENSE.txt 10 | false 11 | Convert your Xamarin.iOS apps to Mac Catalyst apps by adding this nuget. 12 | maccatalyst,mac,catalyst,xamarin,ios,praeclarum,uikit 13 | https://github.com/praeclarum/Praeclarum.MacCatalyst 14 | 15 | images\Icon.jpg 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Praeclarum.MacCatalyst/Praeclarum.MacCatalyst.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | $(CompileDependsOn); 9 | PraeclarumMacCatalystTarget 10 | 11 | 12 | 13 | 16 | 17 | <_PraeclarumMacCatalystTargetAlreadyExecuted>true 18 | 19 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import "AppDelegate.h" 9 | 10 | @interface AppDelegate () 11 | 12 | @end 13 | 14 | @implementation AppDelegate 15 | 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 18 | // Override point for customization after application launch. 19 | return YES; 20 | } 21 | 22 | 23 | #pragma mark - UISceneSession lifecycle 24 | 25 | 26 | - (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { 27 | // Called when a new scene session is being created. 28 | // Use this method to select a configuration to create the new scene with. 29 | return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; 30 | } 31 | 32 | 33 | - (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { 34 | // Called when the user discards a scene session. 35 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 36 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 37 | } 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/ItemsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Xamarin.Forms; 8 | using Xamarin.Forms.Xaml; 9 | 10 | using HelloForms.Models; 11 | using HelloForms.Views; 12 | using HelloForms.ViewModels; 13 | 14 | namespace HelloForms.Views 15 | { 16 | public partial class ItemsPage : ContentPage 17 | { 18 | ItemsViewModel viewModel; 19 | 20 | public ItemsPage() 21 | { 22 | InitializeComponent(); 23 | 24 | BindingContext = viewModel = new ItemsViewModel(); 25 | 26 | var v = new SkiaSharp.Views.Forms.SKCanvasView (); 27 | v.BackgroundColor = Color.Beige; 28 | Foo.Children.Add (v); 29 | } 30 | 31 | async void OnItemSelected(object sender, EventArgs args) 32 | { 33 | var layout = (BindableObject)sender; 34 | var item = (Item)layout.BindingContext; 35 | await Navigation.PushAsync(new ItemDetailPage(new ItemDetailViewModel(item))); 36 | } 37 | 38 | async void AddItem_Clicked(object sender, EventArgs e) 39 | { 40 | await Navigation.PushModalAsync(new NavigationPage(new NewItemPage())); 41 | } 42 | 43 | protected override void OnAppearing() 44 | { 45 | base.OnAppearing(); 46 | 47 | if (viewModel.Items.Count == 0) 48 | viewModel.IsBusy = true; 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | 3 | RELEASE_DIR = ./release_out 4 | 5 | SDK_NAME = maccat-sdk-$(shell date "+%Y%m%d").zip 6 | 7 | XAMARIN_MACIOS = /Users/fak/Projects/xamarin-macios 8 | 9 | IN_XAMARIN_DLL = $(XAMARIN_MACIOS)/_maccat-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/lib/64bits/Xamarin.iOS.dll 10 | HACKED_XAMARIN_DLL = $(TMPDIR)/Xamarin.iOS.dll 11 | 12 | all: 13 | 14 | release: $(RELEASE_DIR) $(HACKED_XAMARIN_DLL) 15 | rm -rf $(RELEASE_DIR)/* 16 | dotnet publish Sdk/maccat.csproj 17 | cp -a README.md maccat.sh ./Sdk/catmain.m ./Sdk/bin/Debug/netcoreapp3.1/publish/maccat.dll ./Sdk/bin/Debug/netcoreapp3.1/publish/maccat.runtimeconfig.json $(RELEASE_DIR) 18 | mkdir -p $(RELEASE_DIR)/xamarin-maccat 19 | cp -a $(XAMARIN_MACIOS)/_maccat-build/Library/Frameworks/Xamarin.Mac.framework/Versions/git/SDKs/Xamarin.macOSCatalyst.sdk $(RELEASE_DIR)/xamarin-maccat 20 | cp -a $(HACKED_XAMARIN_DLL) $(RELEASE_DIR)/xamarin-maccat 21 | 22 | release_zip: release 23 | mkdir -p ./Releases 24 | rm -rf maccat-sdk ./Releases/$(SDK_NAME) 25 | cd $(RELEASE_DIR) && zip -r ../Releases/$(SDK_NAME) * 26 | rm -rf ./Praeclarum.MacCatalyst/maccat-sdk*.zip 27 | cp ./Releases/$(SDK_NAME) ./Praeclarum.MacCatalyst 28 | 29 | $(HACKED_XAMARIN_DLL): $(IN_XAMARIN_DLL) 30 | fsharpi --exec ./Sdk/FixEnums.fsx 31 | 32 | $(RELEASE_DIR): 33 | mkdir -p $@ 34 | 35 | nuget: release_zip 36 | dotnet build -c Release Praeclarum.MacCatalyst/Praeclarum.MacCatalyst.BuildTask.csproj 37 | rm -f _._ 38 | touch _._ 39 | nuget pack Praeclarum.MacCatalyst.nuspec 40 | rm _._ 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Hello.iOS")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Hello.iOS")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("50c7b8c9-e664-45af-b88e-0c9b8b9c1be1")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Research/iOS-Sim-main.m: -------------------------------------------------------------------------------- 1 | #include "xamarin/xamarin.h" 2 | 3 | 4 | void xamarin_register_modules_impl () 5 | { 6 | 7 | } 8 | 9 | void xamarin_register_assemblies_impl () 10 | { 11 | guint32 exception_gchandle = 0; 12 | 13 | } 14 | 15 | extern "C" void xamarin_create_classes_Xamarin_iOS(); 16 | void xamarin_setup_impl () 17 | { 18 | xamarin_create_classes_Xamarin_iOS(); 19 | 20 | mono_dllmap_insert (NULL, "System.Native", NULL, "__Internal", NULL); 21 | mono_dllmap_insert (NULL, "System.Security.Cryptography.Native.Apple", NULL, "__Internal", NULL); 22 | mono_dllmap_insert (NULL, "System.Net.Security.Native", NULL, "__Internal", NULL); 23 | 24 | xamarin_init_mono_debug = FALSE; 25 | xamarin_executable_name = "Hello.iOS.exe"; 26 | mono_use_llvm = FALSE; 27 | xamarin_log_level = 4; 28 | xamarin_arch_name = "x86_64"; 29 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 30 | setenv ("MONO_GC_PARAMS", "nursery-size=512k,major=marksweep-conc", 1); 31 | xamarin_supports_dynamic_registration = TRUE; 32 | } 33 | 34 | int main (int argc, char **argv) 35 | { 36 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 37 | int rv = xamarin_main (argc, argv, XamarinLaunchModeApp); 38 | [pool drain]; 39 | return rv; 40 | } 41 | 42 | void xamarin_initialize_callbacks () __attribute__ ((constructor)); 43 | void xamarin_initialize_callbacks () 44 | { 45 | xamarin_setup = xamarin_setup_impl; 46 | xamarin_register_assemblies = xamarin_register_assemblies_impl; 47 | xamarin_register_modules = xamarin_register_modules_impl; 48 | } 49 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("HelloForms.iOS")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("HelloForms.iOS")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/ItemsPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Research/Hello.macOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "AppIcon-16.png", 5 | "size": "16x16", 6 | "scale": "1x", 7 | "idiom": "mac" 8 | }, 9 | { 10 | "filename": "AppIcon-16@2x.png", 11 | "size": "16x16", 12 | "scale": "2x", 13 | "idiom": "mac" 14 | }, 15 | { 16 | "filename": "AppIcon-32.png", 17 | "size": "32x32", 18 | "scale": "1x", 19 | "idiom": "mac" 20 | }, 21 | { 22 | "filename": "AppIcon-32@2x.png", 23 | "size": "32x32", 24 | "scale": "2x", 25 | "idiom": "mac" 26 | }, 27 | { 28 | "filename": "AppIcon-128.png", 29 | "size": "128x128", 30 | "scale": "1x", 31 | "idiom": "mac" 32 | }, 33 | { 34 | "filename": "AppIcon-128@2x.png", 35 | "size": "128x128", 36 | "scale": "2x", 37 | "idiom": "mac" 38 | }, 39 | { 40 | "filename": "AppIcon-256.png", 41 | "size": "256x256", 42 | "scale": "1x", 43 | "idiom": "mac" 44 | }, 45 | { 46 | "filename": "AppIcon-256@2x.png", 47 | "size": "256x256", 48 | "scale": "2x", 49 | "idiom": "mac" 50 | }, 51 | { 52 | "filename": "AppIcon-512.png", 53 | "size": "512x512", 54 | "scale": "1x", 55 | "idiom": "mac" 56 | }, 57 | { 58 | "filename": "AppIcon-512@2x.png", 59 | "size": "512x512", 60 | "scale": "2x", 61 | "idiom": "mac" 62 | } 63 | ], 64 | "info": { 65 | "version": 1, 66 | "author": "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Research/HelloForms/ViewModels/ItemsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.ObjectModel; 3 | using System.Diagnostics; 4 | using System.Threading.Tasks; 5 | 6 | using Xamarin.Forms; 7 | 8 | using HelloForms.Models; 9 | using HelloForms.Views; 10 | 11 | namespace HelloForms.ViewModels 12 | { 13 | public class ItemsViewModel : BaseViewModel 14 | { 15 | public ObservableCollection Items { get; set; } 16 | public Command LoadItemsCommand { get; set; } 17 | 18 | public ItemsViewModel() 19 | { 20 | Title = "Browse"; 21 | Items = new ObservableCollection(); 22 | LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand()); 23 | 24 | MessagingCenter.Subscribe(this, "AddItem", async (obj, item) => 25 | { 26 | var newItem = item as Item; 27 | Items.Add(newItem); 28 | await DataStore.AddItemAsync(newItem); 29 | }); 30 | } 31 | 32 | async Task ExecuteLoadItemsCommand() 33 | { 34 | IsBusy = true; 35 | 36 | try 37 | { 38 | Items.Clear(); 39 | var items = await DataStore.GetItemsAsync(true); 40 | foreach (var item in items) 41 | { 42 | Items.Add(item); 43 | } 44 | } 45 | catch (Exception ex) 46 | { 47 | Debug.WriteLine(ex); 48 | } 49 | finally 50 | { 51 | IsBusy = false; 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /Sdk/catmain.m: -------------------------------------------------------------------------------- 1 | #include "xamarin/xamarin.h" 2 | 3 | 4 | void xamarin_register_modules_impl () 5 | { 6 | 7 | } 8 | 9 | void xamarin_register_assemblies_impl () 10 | { 11 | guint32 exception_gchandle = 0; 12 | 13 | } 14 | 15 | // void mono_trace_set_level (int); 16 | extern int mono_internal_current_level; 17 | 18 | extern "C" void xamarin_create_classes(); 19 | void xamarin_setup_impl () 20 | { 21 | mono_jit_set_aot_mode (MONO_AOT_MODE_NONE); 22 | // xamarin_create_classes(); 23 | 24 | mono_dllmap_insert (NULL, "System.Native", NULL, "__Internal", NULL); 25 | mono_dllmap_insert (NULL, "System.Security.Cryptography.Native.Apple", NULL, "__Internal", NULL); 26 | mono_dllmap_insert (NULL, "System.Net.Security.Native", NULL, "__Internal", NULL); 27 | 28 | xamarin_init_mono_debug = FALSE; 29 | xamarin_executable_name = APP_EXECUTABLE_NAME; 30 | mono_use_llvm = FALSE; 31 | xamarin_log_level = 8; 32 | // mono_trace_set_level (0xFF); 33 | mono_internal_current_level = 0xFFFFFF; 34 | xamarin_arch_name = "x86_64"; 35 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 36 | setenv ("MONO_GC_PARAMS", "nursery-size=512k,major=marksweep-conc", 1); 37 | xamarin_supports_dynamic_registration = TRUE; 38 | } 39 | 40 | int main (int argc, char **argv) 41 | { 42 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 43 | int rv = xamarin_main (argc, argv, XamarinLaunchModeApp); 44 | [pool drain]; 45 | return rv; 46 | } 47 | 48 | void xamarin_initialize_callbacks () __attribute__ ((constructor)); 49 | void xamarin_initialize_callbacks () 50 | { 51 | xamarin_setup = xamarin_setup_impl; 52 | xamarin_register_assemblies = xamarin_register_assemblies_impl; 53 | xamarin_register_modules = xamarin_register_modules_impl; 54 | } 55 | -------------------------------------------------------------------------------- /Research/MyBuild/catmain.m: -------------------------------------------------------------------------------- 1 | #include "xamarin/xamarin.h" 2 | 3 | 4 | void xamarin_register_modules_impl () 5 | { 6 | 7 | } 8 | 9 | void xamarin_register_assemblies_impl () 10 | { 11 | guint32 exception_gchandle = 0; 12 | 13 | } 14 | 15 | // void mono_trace_set_level (int); 16 | extern int mono_internal_current_level; 17 | 18 | extern "C" void xamarin_create_classes(); 19 | void xamarin_setup_impl () 20 | { 21 | mono_jit_set_aot_mode (MONO_AOT_MODE_NONE); 22 | // xamarin_create_classes(); 23 | 24 | mono_dllmap_insert (NULL, "System.Native", NULL, "__Internal", NULL); 25 | mono_dllmap_insert (NULL, "System.Security.Cryptography.Native.Apple", NULL, "__Internal", NULL); 26 | mono_dllmap_insert (NULL, "System.Net.Security.Native", NULL, "__Internal", NULL); 27 | 28 | xamarin_init_mono_debug = FALSE; 29 | xamarin_executable_name = "Hello.iOS.exe"; 30 | mono_use_llvm = FALSE; 31 | xamarin_log_level = 8; 32 | // mono_trace_set_level (0xFF); 33 | mono_internal_current_level = 0xFFFFFF; 34 | xamarin_arch_name = "x86_64"; 35 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 36 | setenv ("MONO_GC_PARAMS", "nursery-size=512k,major=marksweep-conc", 1); 37 | xamarin_supports_dynamic_registration = TRUE; 38 | } 39 | 40 | int main (int argc, char **argv) 41 | { 42 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 43 | int rv = xamarin_main (argc, argv, XamarinLaunchModeApp); 44 | [pool drain]; 45 | return rv; 46 | } 47 | 48 | void xamarin_initialize_callbacks () __attribute__ ((constructor)); 49 | void xamarin_initialize_callbacks () 50 | { 51 | xamarin_setup = xamarin_setup_impl; 52 | xamarin_register_assemblies = xamarin_register_assemblies_impl; 53 | xamarin_register_modules = xamarin_register_modules_impl; 54 | } 55 | -------------------------------------------------------------------------------- /Research/MyBuild/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | set -x 5 | set -u 6 | 7 | # INPUT VARIABLES 8 | APPNAME="Hello.macOS" 9 | PROJDIR="/Users/fak/Dropbox/Projects/Catalyst/Research/Hello.macOS" 10 | 11 | # ENVIRONMENT VARIABLES 12 | CLANG=$(xcrun -f clang) 13 | XAMMACDIR="/Library/Frameworks/Xamarin.Mac.framework/Versions/6.20.2.2" 14 | 15 | # COMPUTED VARIABLED 16 | GENCODEDIR="$PROJDIR/obj/Release/mmp-cache" 17 | OUTDIR="$PROJDIR/bin/Release/$APPNAME.app/Contents/MacOS" 18 | CFLAGS="-mmacosx-version-min=10.15 -arch x86_64 -fobjc-runtime=macosx-10.15 -Wno-unguarded-availability-new -std=c++14 -ObjC" 19 | CFLAGS2="-lz -liconv -lc++ -x objective-c++ -stdlib=libc++" 20 | CFLAGS3="-fno-caret-diagnostics -fno-diagnostics-fixit-info -isysroot /Applications/Xcode_12GM.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk" 21 | DEFINES="-D_THREAD_SAFE" 22 | FRAMEWORKS="-framework AppKit -framework Foundation -framework Security -framework Carbon -framework GSS" 23 | XAMMACLIB="$XAMMACDIR/lib/libxammac.a" 24 | US="-u _SystemNative_ConvertErrorPlatformToPal -u _SystemNative_ConvertErrorPalToPlatform -u _SystemNative_StrErrorR -u _SystemNative_GetNonCryptographicallySecureRandomBytes -u _SystemNative_Stat2 -u _SystemNative_LStat2 -u _xamarin_timezone_get_local_name -u _xamarin_timezone_get_data -u _xamarin_find_protocol_wrapper_type -u _xamarin_get_block_descriptor" 25 | OUT="$OUTDIR/$APPNAME" 26 | INCLUDES="-I$XAMMACDIR/include/mono-2.0 -I$XAMMACDIR/include" 27 | LINKS="$XAMMACDIR/lib/libmonosgen-2.0.a $XAMMACDIR/lib/libmono-native-unified.a" 28 | COMPILES="$GENCODEDIR/registrar.m macmain.m" 29 | 30 | # COMPILE AND LINK 31 | echo Building $APPNAME 32 | 33 | $CLANG $CFLAGS $FRAMEWORKS $US $XAMMACLIB -o $OUT $DEFINES $INCLUDES $LINKS $CFLAGS2 $COMPILES $CFLAGS3 34 | -------------------------------------------------------------------------------- /Research/Hello.iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Research/HelloForms/ViewModels/BaseViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Runtime.CompilerServices; 5 | 6 | using Xamarin.Forms; 7 | 8 | using HelloForms.Models; 9 | using HelloForms.Services; 10 | 11 | namespace HelloForms.ViewModels 12 | { 13 | public class BaseViewModel : INotifyPropertyChanged 14 | { 15 | public IDataStore DataStore => DependencyService.Get>(); 16 | 17 | bool isBusy = false; 18 | public bool IsBusy 19 | { 20 | get { return isBusy; } 21 | set { SetProperty(ref isBusy, value); } 22 | } 23 | 24 | string title = string.Empty; 25 | public string Title 26 | { 27 | get { return title; } 28 | set { SetProperty(ref title, value); } 29 | } 30 | 31 | protected bool SetProperty(ref T backingStore, T value, 32 | [CallerMemberName] string propertyName = "", 33 | Action onChanged = null) 34 | { 35 | if (EqualityComparer.Default.Equals(backingStore, value)) 36 | return false; 37 | 38 | backingStore = value; 39 | onChanged?.Invoke(); 40 | OnPropertyChanged(propertyName); 41 | return true; 42 | } 43 | 44 | #region INotifyPropertyChanged 45 | public event PropertyChangedEventHandler PropertyChanged; 46 | protected void OnPropertyChanged([CallerMemberName] string propertyName = "") 47 | { 48 | var changed = PropertyChanged; 49 | if (changed == null) 50 | return; 51 | 52 | changed.Invoke(this, new PropertyChangedEventArgs(propertyName)); 53 | } 54 | #endregion 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Research/iOS-Device-main.m: -------------------------------------------------------------------------------- 1 | #include "xamarin/xamarin.h" 2 | 3 | extern void *mono_aot_module_Hello_iOS_info; 4 | extern void *mono_aot_module_mscorlib_info; 5 | extern void *mono_aot_module_Xamarin_iOS_info; 6 | extern void *mono_aot_module_System_info; 7 | 8 | void xamarin_register_modules_impl () 9 | { 10 | mono_aot_register_module (mono_aot_module_Hello_iOS_info); 11 | mono_aot_register_module (mono_aot_module_mscorlib_info); 12 | mono_aot_register_module (mono_aot_module_Xamarin_iOS_info); 13 | mono_aot_register_module (mono_aot_module_System_info); 14 | 15 | } 16 | 17 | void xamarin_register_assemblies_impl () 18 | { 19 | guint32 exception_gchandle = 0; 20 | 21 | } 22 | 23 | extern "C" void xamarin_create_classes(); 24 | void xamarin_setup_impl () 25 | { 26 | mono_jit_set_aot_mode (MONO_AOT_MODE_FULL); 27 | xamarin_create_classes(); 28 | 29 | mono_dllmap_insert (NULL, "System.Native", NULL, "__Internal", NULL); 30 | mono_dllmap_insert (NULL, "System.Security.Cryptography.Native.Apple", NULL, "__Internal", NULL); 31 | mono_dllmap_insert (NULL, "System.Net.Security.Native", NULL, "__Internal", NULL); 32 | 33 | xamarin_init_mono_debug = FALSE; 34 | xamarin_executable_name = "Hello.iOS.exe"; 35 | mono_use_llvm = FALSE; 36 | xamarin_log_level = 4; 37 | xamarin_arch_name = "arm64"; 38 | xamarin_marshal_objectivec_exception_mode = MarshalObjectiveCExceptionModeDisable; 39 | setenv ("MONO_GC_PARAMS", "nursery-size=512k,major=marksweep-conc", 1); 40 | xamarin_supports_dynamic_registration = FALSE; 41 | } 42 | 43 | int main (int argc, char **argv) 44 | { 45 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 46 | int rv = xamarin_main (argc, argv, XamarinLaunchModeApp); 47 | [pool drain]; 48 | return rv; 49 | } 50 | 51 | void xamarin_initialize_callbacks () __attribute__ ((constructor)); 52 | void xamarin_initialize_callbacks () 53 | { 54 | xamarin_setup = xamarin_setup_impl; 55 | xamarin_register_assemblies = xamarin_register_assemblies_impl; 56 | xamarin_register_modules = xamarin_register_modules_impl; 57 | } 58 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Research/Hello.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Foundation; 3 | using UIKit; 4 | 5 | namespace Hello.iOS 6 | { 7 | // The UIApplicationDelegate for the application. This class is responsible for launching the 8 | // User Interface of the application, as well as listening (and optionally responding) to application events from iOS. 9 | [Register("AppDelegate")] 10 | public class AppDelegate : UIResponder, IUIApplicationDelegate 11 | { 12 | 13 | public AppDelegate (IntPtr handle) 14 | : base (handle) 15 | { 16 | Console.WriteLine ("Created app delegate"); 17 | } 18 | 19 | [Export("window")] 20 | public UIWindow Window { get; set; } 21 | 22 | [Export("application:didFinishLaunchingWithOptions:")] 23 | public bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) 24 | { 25 | // Override point for customization after application launch. 26 | // If not required for your application you can safely delete this method 27 | return true; 28 | } 29 | 30 | // UISceneSession Lifecycle 31 | 32 | [Export("application:configurationForConnectingSceneSession:options:")] 33 | public UISceneConfiguration GetConfiguration(UIApplication application, UISceneSession connectingSceneSession, UISceneConnectionOptions options) 34 | { 35 | // Called when a new scene session is being created. 36 | // Use this method to select a configuration to create the new scene with. 37 | return UISceneConfiguration.Create("Default Configuration", connectingSceneSession.Role); 38 | } 39 | 40 | [Export("application:didDiscardSceneSessions:")] 41 | public void DidDiscardSceneSessions(UIApplication application, NSSet sceneSessions) 42 | { 43 | // Called when the user discards a scene session. 44 | // If any sessions were discarded while the application was not running, this will be called shortly after `FinishedLaunching`. 45 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 46 | } 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UIApplicationSupportsIndirectInputEvents 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UIMainStoryboardFile 47 | Main 48 | UIRequiredDeviceCapabilities 49 | 50 | armv7 51 | 52 | UISupportedInterfaceOrientations 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationLandscapeLeft 56 | UIInterfaceOrientationLandscapeRight 57 | 58 | UISupportedInterfaceOrientations~ipad 59 | 60 | UIInterfaceOrientationPortrait 61 | UIInterfaceOrientationPortraitUpsideDown 62 | UIInterfaceOrientationLandscapeLeft 63 | UIInterfaceOrientationLandscapeRight 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /Research/HelloForms/Services/MockDataStore.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using HelloForms.Models; 6 | 7 | namespace HelloForms.Services 8 | { 9 | public class MockDataStore : IDataStore 10 | { 11 | readonly List items; 12 | 13 | public MockDataStore() 14 | { 15 | items = new List() 16 | { 17 | new Item { Id = Guid.NewGuid().ToString(), Text = "First item", Description="This is an item description." }, 18 | new Item { Id = Guid.NewGuid().ToString(), Text = "Second item", Description="This is an item description." }, 19 | new Item { Id = Guid.NewGuid().ToString(), Text = "Third item", Description="This is an item description." }, 20 | new Item { Id = Guid.NewGuid().ToString(), Text = "Fourth item", Description="This is an item description." }, 21 | new Item { Id = Guid.NewGuid().ToString(), Text = "Fifth item", Description="This is an item description." }, 22 | new Item { Id = Guid.NewGuid().ToString(), Text = "Sixth item", Description="This is an item description." } 23 | }; 24 | } 25 | 26 | public async Task AddItemAsync(Item item) 27 | { 28 | items.Add(item); 29 | 30 | return await Task.FromResult(true); 31 | } 32 | 33 | public async Task UpdateItemAsync(Item item) 34 | { 35 | var oldItem = items.Where((Item arg) => arg.Id == item.Id).FirstOrDefault(); 36 | items.Remove(oldItem); 37 | items.Add(item); 38 | 39 | return await Task.FromResult(true); 40 | } 41 | 42 | public async Task DeleteItemAsync(string id) 43 | { 44 | var oldItem = items.Where((Item arg) => arg.Id == id).FirstOrDefault(); 45 | items.Remove(oldItem); 46 | 47 | return await Task.FromResult(true); 48 | } 49 | 50 | public async Task GetItemAsync(string id) 51 | { 52 | return await Task.FromResult(items.FirstOrDefault(s => s.Id == id)); 53 | } 54 | 55 | public async Task> GetItemsAsync(bool forceRefresh = false) 56 | { 57 | return await Task.FromResult(items); 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/SceneDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.m 3 | // HelloObjC 4 | // 5 | // Created by Frank A. Krueger on 10/10/20. 6 | // 7 | 8 | #import "SceneDelegate.h" 9 | 10 | @interface SceneDelegate () 11 | 12 | @end 13 | 14 | @implementation SceneDelegate 15 | 16 | 17 | - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { 18 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 19 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 20 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 21 | } 22 | 23 | 24 | - (void)sceneDidDisconnect:(UIScene *)scene { 25 | // Called as the scene is being released by the system. 26 | // This occurs shortly after the scene enters the background, or when its session is discarded. 27 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 28 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). 29 | } 30 | 31 | 32 | - (void)sceneDidBecomeActive:(UIScene *)scene { 33 | // Called when the scene has moved from an inactive state to an active state. 34 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 35 | } 36 | 37 | 38 | - (void)sceneWillResignActive:(UIScene *)scene { 39 | // Called when the scene will move from an active state to an inactive state. 40 | // This may occur due to temporary interruptions (ex. an incoming phone call). 41 | } 42 | 43 | 44 | - (void)sceneWillEnterForeground:(UIScene *)scene { 45 | // Called as the scene transitions from the background to the foreground. 46 | // Use this method to undo the changes made on entering the background. 47 | } 48 | 49 | 50 | - (void)sceneDidEnterBackground:(UIScene *)scene { 51 | // Called as the scene transitions from the foreground to the background. 52 | // Use this method to save data, release shared resources, and store enough scene-specific state information 53 | // to restore the scene back to its current state. 54 | } 55 | 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDisplayName 6 | Hello.iOS 7 | CFBundleIdentifier 8 | com.companyname.Hello-iOS 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 1.0 13 | LSRequiresIPhoneOS 14 | 15 | UIApplicationSceneManifest 16 | 17 | UIApplicationSupportsMultipleScenes 18 | 19 | UISceneConfigurations 20 | 21 | UIWindowSceneSessionRoleApplication 22 | 23 | 24 | UISceneConfigurationName 25 | Default Configuration 26 | UISceneDelegateClassName 27 | SceneDelegate 28 | UISceneStoryboardFile 29 | Main 30 | 31 | 32 | 33 | 34 | MinimumOSVersion 35 | 14.0 36 | UIDeviceFamily 37 | 38 | 1 39 | 2 40 | 41 | UILaunchStoryboardName 42 | LaunchScreen 43 | UIMainStoryboardFile 44 | Main 45 | UIMainStoryboardFile~ipad 46 | Main 47 | UIRequiredDeviceCapabilities 48 | 49 | armv7 50 | 51 | UISupportedInterfaceOrientations 52 | 53 | UIInterfaceOrientationPortrait 54 | UIInterfaceOrientationLandscapeLeft 55 | UIInterfaceOrientationLandscapeRight 56 | 57 | UISupportedInterfaceOrientations~ipad 58 | 59 | UIInterfaceOrientationPortrait 60 | UIInterfaceOrientationPortraitUpsideDown 61 | UIInterfaceOrientationLandscapeLeft 62 | UIInterfaceOrientationLandscapeRight 63 | 64 | XSAppIconAssets 65 | Assets.xcassets/AppIcon.appiconset 66 | 67 | -------------------------------------------------------------------------------- /Sdk/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace MacCatSdk 7 | { 8 | class Program 9 | { 10 | static async Task Main (string[] args) 11 | { 12 | var projFile = ""; 13 | var wantsHelp = false; 14 | var config = "Release"; 15 | var platform = "iPhoneSimulator"; 16 | var run = true; 17 | var argc = args.Length; 18 | for (var i = 0; i < argc; i++) { 19 | var a = args[i]; 20 | if (a.EndsWith ("proj", StringComparison.InvariantCultureIgnoreCase)) { 21 | projFile = a; 22 | } 23 | else if (a == "-c" || a == "--configuration" && i + 1 < argc) { 24 | config = args[i + 1]; 25 | i++; 26 | } 27 | else if (a == "-h" || a == "--help") { 28 | wantsHelp = true; 29 | } 30 | else if (a == "--no-run") { 31 | run = false; 32 | } 33 | else if (a == "-p" || a == "--platform" && i + 1 < argc) { 34 | platform = args[i + 1]; 35 | i++; 36 | } 37 | } 38 | if (wantsHelp || string.IsNullOrEmpty (projFile)) { 39 | Console.ResetColor (); 40 | Console.WriteLine ($"Usage: maccat project-file"); 41 | Console.WriteLine ($""); 42 | Console.WriteLine ($"Example: maccat /Users/me/Projects/MyApp/MyApp.csproj"); 43 | Console.WriteLine ($""); 44 | Console.WriteLine ($"Options:"); 45 | Console.WriteLine ($" -c, --configuration The configuration to build from. The default is '{config}'."); 46 | Console.WriteLine ($" -h, --help Show command line help."); 47 | Console.WriteLine ($" --no-run Don't run then app after building."); 48 | Console.WriteLine ($" -p, --platform The platform to build from. The default is '{platform}'."); 49 | return wantsHelp ? 0 : 1; 50 | } 51 | 52 | Console.ForegroundColor = ConsoleColor.Cyan; 53 | Console.WriteLine ("Xamarin.iOS to Mac Catalyst Converter BETA"); 54 | Console.ResetColor (); 55 | 56 | if (!File.Exists (projFile)) { 57 | Console.ForegroundColor = ConsoleColor.Red; 58 | Console.WriteLine ($"Could not locate {projFile}"); 59 | return 2; 60 | } 61 | 62 | try { 63 | await (new BuildApp (projFile, config, platform, run, ".")).RunAsync (); 64 | return 0; 65 | 66 | } 67 | catch (Exception ex) { 68 | Console.ForegroundColor = ConsoleColor.Red; 69 | Console.WriteLine (ex.Message); 70 | Console.ForegroundColor = ConsoleColor.DarkGray; 71 | Console.WriteLine (ex); 72 | return 10; 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /Research/MyBuild/mcat.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | # set -x 5 | set -u 6 | 7 | # INPUT VARIABLES 8 | APPNAME="Hello.iOS" 9 | PROJDIR="/Users/fak/Dropbox/Projects/Catalyst/Research/Hello.iOS" 10 | 11 | ASSEMBLIES_DIR="$PROJDIR/obj/iPhone/Release/mtouch-cache/1-Link" 12 | LINKED_ASSEMBLIES_DIR="$PROJDIR/obj/iPhone/Release/mtouch-cache/3-Build" 13 | 14 | APP_DIR="Hi.app" 15 | 16 | REGISTRAR_DIR="$PROJDIR/obj/iPhone/Release/mtouch-cache" 17 | REGISTRAR_SOURCE="$REGISTRAR_DIR/registrar.m" 18 | 19 | # ENVIRONMENT VARIABLES 20 | CLANG=$(xcrun -f clang) 21 | XAMMACDIR="/Library/Frameworks/Xamarin.Mac.framework/Versions/6.20.2.2" 22 | XAMMACCATDIR="/Users/fak/Projects/xamarin-macios/_maccat-build/Library/Frameworks/Xamarin.Mac.framework/Versions/git/SDKs/Xamarin.macOSCatalyst.sdk" 23 | MONOMACCATDIR="/Users/fak/Projects/mono/sdks/out/maccat-mac64-release" 24 | MACSDK="/Applications/Xcode_12.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk" 25 | 26 | # COMPUTED VARIABLED 27 | CFLAGS="-target x86_64-apple-ios13.6-macabi -Wno-unguarded-availability-new -std=c++14 -ObjC" 28 | CFLAGS2="-lz -liconv -lc++ -x objective-c++ -stdlib=libc++" 29 | CFLAGS3="-fno-caret-diagnostics -fno-diagnostics-fixit-info -isysroot $MACSDK" 30 | DEFINES="-D_THREAD_SAFE" 31 | # FRAMEWORKS="-framework AppKit -framework Foundation -framework Security -framework Carbon -framework GSS" 32 | FRAMEWORKS="-iframework $MACSDK/System/iOSSupport/System/Library/Frameworks -framework Foundation -framework UIKit" 33 | XAMMACLIB="$XAMMACCATDIR/lib/libxammaccat.a" 34 | US="-u _SystemNative_ConvertErrorPlatformToPal -u _SystemNative_ConvertErrorPalToPlatform -u _SystemNative_StrErrorR -u _SystemNative_GetNonCryptographicallySecureRandomBytes -u _SystemNative_Stat2 -u _SystemNative_LStat2 -u _xamarin_timezone_get_local_name -u _xamarin_timezone_get_data -u _xamarin_find_protocol_wrapper_type -u _xamarin_get_block_descriptor" 35 | OUT="$APP_DIR/Contents/MacOS/$APPNAME" 36 | INCLUDES="-I$MONOMACCATDIR/include/mono-2.0 -I$XAMMACCATDIR/include" 37 | LINKS="$MONOMACCATDIR/lib/libmonosgen-2.0.a $MONOMACCATDIR/lib/libmono-native.a" 38 | COMPILES="catmain.m" 39 | 40 | # COMPILE AND LINK 41 | echo Building $APPNAME 42 | 43 | $CLANG $CFLAGS $FRAMEWORKS $US $XAMMACLIB -o $OUT $DEFINES $INCLUDES $LINKS $CFLAGS2 $COMPILES $CFLAGS3 44 | 45 | echo Built $OUT 46 | 47 | rm -f "$APP_DIR/Contents/MonoBundle/"*.dll 48 | rm -f "$APP_DIR/Contents/MonoBundle/"*.exe 49 | cp "$ASSEMBLIES_DIR"/*.dll "$ASSEMBLIES_DIR"/*.exe "$APP_DIR/Contents/MonoBundle/" 50 | cp "/Users/fak/Projects/xamarin-macios/src/build/ios/native-64"/Xamarin.iOS.dll "$APP_DIR/Contents/MonoBundle/" 51 | -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Resources/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Research/Hello.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "scale": "2x", 5 | "size": "20x20", 6 | "idiom": "iphone", 7 | "filename": "Icon40.png" 8 | }, 9 | { 10 | "scale": "3x", 11 | "size": "20x20", 12 | "idiom": "iphone", 13 | "filename": "Icon60.png" 14 | }, 15 | { 16 | "scale": "2x", 17 | "size": "29x29", 18 | "idiom": "iphone", 19 | "filename": "Icon58.png" 20 | }, 21 | { 22 | "scale": "3x", 23 | "size": "29x29", 24 | "idiom": "iphone", 25 | "filename": "Icon87.png" 26 | }, 27 | { 28 | "scale": "2x", 29 | "size": "40x40", 30 | "idiom": "iphone", 31 | "filename": "Icon80.png" 32 | }, 33 | { 34 | "scale": "3x", 35 | "size": "40x40", 36 | "idiom": "iphone", 37 | "filename": "Icon120.png" 38 | }, 39 | { 40 | "scale": "2x", 41 | "size": "60x60", 42 | "idiom": "iphone", 43 | "filename": "Icon120.png" 44 | }, 45 | { 46 | "scale": "3x", 47 | "size": "60x60", 48 | "idiom": "iphone", 49 | "filename": "Icon180.png" 50 | }, 51 | { 52 | "scale": "1x", 53 | "size": "20x20", 54 | "idiom": "ipad", 55 | "filename": "Icon20.png" 56 | }, 57 | { 58 | "scale": "2x", 59 | "size": "20x20", 60 | "idiom": "ipad", 61 | "filename": "Icon40.png" 62 | }, 63 | { 64 | "scale": "1x", 65 | "size": "29x29", 66 | "idiom": "ipad", 67 | "filename": "Icon29.png" 68 | }, 69 | { 70 | "scale": "2x", 71 | "size": "29x29", 72 | "idiom": "ipad", 73 | "filename": "Icon58.png" 74 | }, 75 | { 76 | "scale": "1x", 77 | "size": "40x40", 78 | "idiom": "ipad", 79 | "filename": "Icon40.png" 80 | }, 81 | { 82 | "scale": "2x", 83 | "size": "40x40", 84 | "idiom": "ipad", 85 | "filename": "Icon80.png" 86 | }, 87 | { 88 | "scale": "1x", 89 | "size": "76x76", 90 | "idiom": "ipad", 91 | "filename": "Icon76.png" 92 | }, 93 | { 94 | "scale": "2x", 95 | "size": "76x76", 96 | "idiom": "ipad", 97 | "filename": "Icon152.png" 98 | }, 99 | { 100 | "scale": "2x", 101 | "size": "83.5x83.5", 102 | "idiom": "ipad", 103 | "filename": "Icon167.png" 104 | }, 105 | { 106 | "scale": "1x", 107 | "size": "1024x1024", 108 | "idiom": "ios-marketing", 109 | "filename": "Icon1024.png" 110 | } 111 | ], 112 | "properties": {}, 113 | "info": { 114 | "version": 1, 115 | "author": "xcode" 116 | } 117 | } -------------------------------------------------------------------------------- /Research/HelloForms.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "scale": "2x", 5 | "size": "20x20", 6 | "idiom": "iphone", 7 | "filename": "Icon40.png" 8 | }, 9 | { 10 | "scale": "3x", 11 | "size": "20x20", 12 | "idiom": "iphone", 13 | "filename": "Icon60.png" 14 | }, 15 | { 16 | "scale": "2x", 17 | "size": "29x29", 18 | "idiom": "iphone", 19 | "filename": "Icon58.png" 20 | }, 21 | { 22 | "scale": "3x", 23 | "size": "29x29", 24 | "idiom": "iphone", 25 | "filename": "Icon87.png" 26 | }, 27 | { 28 | "scale": "2x", 29 | "size": "40x40", 30 | "idiom": "iphone", 31 | "filename": "Icon80.png" 32 | }, 33 | { 34 | "scale": "3x", 35 | "size": "40x40", 36 | "idiom": "iphone", 37 | "filename": "Icon120.png" 38 | }, 39 | { 40 | "scale": "2x", 41 | "size": "60x60", 42 | "idiom": "iphone", 43 | "filename": "Icon120.png" 44 | }, 45 | { 46 | "scale": "3x", 47 | "size": "60x60", 48 | "idiom": "iphone", 49 | "filename": "Icon180.png" 50 | }, 51 | { 52 | "scale": "1x", 53 | "size": "20x20", 54 | "idiom": "ipad", 55 | "filename": "Icon20.png" 56 | }, 57 | { 58 | "scale": "2x", 59 | "size": "20x20", 60 | "idiom": "ipad", 61 | "filename": "Icon40.png" 62 | }, 63 | { 64 | "scale": "1x", 65 | "size": "29x29", 66 | "idiom": "ipad", 67 | "filename": "Icon29.png" 68 | }, 69 | { 70 | "scale": "2x", 71 | "size": "29x29", 72 | "idiom": "ipad", 73 | "filename": "Icon58.png" 74 | }, 75 | { 76 | "scale": "1x", 77 | "size": "40x40", 78 | "idiom": "ipad", 79 | "filename": "Icon40.png" 80 | }, 81 | { 82 | "scale": "2x", 83 | "size": "40x40", 84 | "idiom": "ipad", 85 | "filename": "Icon80.png" 86 | }, 87 | { 88 | "scale": "1x", 89 | "size": "76x76", 90 | "idiom": "ipad", 91 | "filename": "Icon76.png" 92 | }, 93 | { 94 | "scale": "2x", 95 | "size": "76x76", 96 | "idiom": "ipad", 97 | "filename": "Icon152.png" 98 | }, 99 | { 100 | "scale": "2x", 101 | "size": "83.5x83.5", 102 | "idiom": "ipad", 103 | "filename": "Icon167.png" 104 | }, 105 | { 106 | "scale": "1x", 107 | "size": "1024x1024", 108 | "idiom": "ios-marketing", 109 | "filename": "Icon1024.png" 110 | } 111 | ], 112 | "properties": {}, 113 | "info": { 114 | "version": 1, 115 | "author": "xcode" 116 | } 117 | } -------------------------------------------------------------------------------- /Research/Hello.iOS/SceneDelegate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Foundation; 3 | using UIKit; 4 | 5 | namespace NewSingleViewTemplate 6 | { 7 | [Register("SceneDelegate")] 8 | public class SceneDelegate : UIResponder, IUIWindowSceneDelegate 9 | { 10 | 11 | [Export("window")] 12 | public UIWindow Window { get; set; } 13 | 14 | [Export("scene:willConnectToSession:options:")] 15 | public void WillConnect(UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions) 16 | { 17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 19 | // This delegate does not imply the connecting scene or session are new (see UIApplicationDelegate `GetConfiguration` instead). 20 | } 21 | 22 | [Export("sceneDidDisconnect:")] 23 | public void DidDisconnect(UIScene scene) 24 | { 25 | // Called as the scene is being released by the system. 26 | // This occurs shortly after the scene enters the background, or when its session is discarded. 27 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 28 | // The scene may re-connect later, as its session was not neccessarily discarded (see UIApplicationDelegate `DidDiscardSceneSessions` instead). 29 | } 30 | 31 | [Export("sceneDidBecomeActive:")] 32 | public void DidBecomeActive(UIScene scene) 33 | { 34 | // Called when the scene has moved from an inactive state to an active state. 35 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 36 | } 37 | 38 | [Export("sceneWillResignActive:")] 39 | public void WillResignActive(UIScene scene) 40 | { 41 | // Called when the scene will move from an active state to an inactive state. 42 | // This may occur due to temporary interruptions (ex. an incoming phone call). 43 | } 44 | 45 | [Export("sceneWillEnterForeground:")] 46 | public void WillEnterForeground(UIScene scene) 47 | { 48 | // Called as the scene transitions from the background to the foreground. 49 | // Use this method to undo the changes made on entering the background. 50 | } 51 | 52 | [Export("sceneDidEnterBackground:")] 53 | public void DidEnterBackground(UIScene scene) 54 | { 55 | // Called as the scene transitions from the foreground to the background. 56 | // Use this method to save data, release shared resources, and store enough scene-specific state information 57 | // to restore the scene back to its current state. 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Research/HelloObjC/HelloObjC/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Research/HelloObjC.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 19H2 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | HelloObjC 11 | CFBundleIdentifier 12 | com.kruegersystems.HelloObjC 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | HelloObjC 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSupportedPlatforms 22 | 23 | MacOSX 24 | 25 | CFBundleVersion 26 | 1 27 | DTCompiler 28 | com.apple.compilers.llvm.clang.1_0 29 | DTPlatformBuild 30 | 12A7209 31 | DTPlatformName 32 | macosx 33 | DTPlatformVersion 34 | 10.15.6 35 | DTSDKBuild 36 | 19G68 37 | DTSDKName 38 | macosx10.15 39 | DTXcode 40 | 1200 41 | DTXcodeBuild 42 | 12A7209 43 | LSMinimumSystemVersion 44 | 10.15.6 45 | NSSupportsAutomaticTermination 46 | 47 | NSSupportsSuddenTermination 48 | 49 | UIApplicationSceneManifest 50 | 51 | UIApplicationSupportsMultipleScenes 52 | 53 | UISceneConfigurations 54 | 55 | UIWindowSceneSessionRoleApplication 56 | 57 | 58 | UISceneConfigurationName 59 | Default Configuration 60 | UISceneDelegateClassName 61 | SceneDelegate 62 | UISceneStoryboardFile 63 | Main 64 | 65 | 66 | 67 | 68 | UIApplicationSupportsIndirectInputEvents 69 | 70 | UIDeviceFamily 71 | 72 | 2 73 | 74 | UILaunchStoryboardName 75 | LaunchScreen 76 | UIMainStoryboardFile 77 | Main 78 | UIRequiredDeviceCapabilities 79 | 80 | armv7 81 | 82 | UISupportedInterfaceOrientations 83 | 84 | UIInterfaceOrientationPortrait 85 | UIInterfaceOrientationLandscapeLeft 86 | UIInterfaceOrientationLandscapeRight 87 | 88 | UISupportedInterfaceOrientations~ipad 89 | 90 | UIInterfaceOrientationPortrait 91 | UIInterfaceOrientationPortraitUpsideDown 92 | UIInterfaceOrientationLandscapeLeft 93 | UIInterfaceOrientationLandscapeRight 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /Praeclarum.MacCatalyst/BuildTask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.IO.Compression; 4 | using System.Linq; 5 | using maccat; 6 | using MacCatSdk; 7 | using Microsoft.Build.Framework; 8 | using Microsoft.Build.Utilities; 9 | using static maccat.Terminal; 10 | 11 | namespace Praeclarum.MacCatalyst 12 | { 13 | public class PraeclarumMacCatalystBuildTask : Task 14 | { 15 | public string SdkPath { get; set; } = ""; 16 | public string ProjectFile { get; set; } = ""; 17 | public string ProjectAssemblyName { get; set; } = ""; 18 | public string ProjectOutputPath { get; set; } = ""; 19 | public string Configuration { get; set; } = ""; 20 | public string Platform { get; set; } = ""; 21 | public string CodesignEntitlements { get; set; } = ""; 22 | public string CodesignProvision { get; set; } = ""; 23 | public string CodesignKey { get; set; } = ""; 24 | public bool Enabled { get; set; } = true; 25 | public bool Run { get; set; } = false; 26 | public ITaskItem[] InputFiles { get; set; } = Array.Empty (); 27 | 28 | public override bool Execute () 29 | { 30 | InfoFunc = m => Log.LogMessage (m); 31 | WarningFunc = m => Log.LogWarning (m); 32 | ErrorFunc = m => Log.LogError (m); 33 | try { 34 | Info ("Thanks for using Praeclarum.MacCatalyst. You can sponsor my work at: https://github.com/sponsors/praeclarum"); 35 | if (!Enabled) { 36 | Info ("Not enabled. Set MacCatalystEnabled=true to enable."); 37 | return true; 38 | } 39 | var sdkPath = ExpandSdk (); 40 | var builder = new BuildApp (ProjectFile, Configuration, Platform, Run, sdkPath, ProjectAssemblyName, ProjectOutputPath) { 41 | CodesignEntitlements = CodesignEntitlements, 42 | CodesignKey = CodesignKey, 43 | CodesignProvision = CodesignProvision 44 | }; 45 | builder.RunAsync ().Wait (); 46 | return true; 47 | } 48 | catch (Exception ex) { 49 | while (ex.InnerException != null) 50 | ex = ex.InnerException; 51 | Log.LogErrorFromException (ex); 52 | return false; 53 | } 54 | } 55 | 56 | string ExpandSdk () 57 | { 58 | var asm = GetType ().Assembly; 59 | var names = asm.GetManifestResourceNames (); 60 | var name = names.FirstOrDefault (x => x.Contains("maccat-sdk-") && x.EndsWith (".zip")); 61 | if (!string.IsNullOrEmpty (name)) { 62 | var simpleName = Path.GetFileNameWithoutExtension (name[name.IndexOf ("maccat-sdk-")..]); 63 | 64 | var sdkPath = Path.Combine (Path.GetTempPath (), simpleName); 65 | var sdkTestFilePath = Path.Combine (sdkPath, "xamarin-maccat", "Xamarin.iOS.dll"); 66 | var sdkExists = File.Exists (sdkTestFilePath); 67 | if (sdkExists) 68 | return sdkPath; 69 | 70 | Info ($"Installing SDK in \"{sdkPath}\"."); 71 | 72 | using var zips = asm.GetManifestResourceStream (name); 73 | 74 | using var zip = new ZipArchive (zips, ZipArchiveMode.Read); 75 | zip.ExtractToDirectory (sdkPath, true); 76 | 77 | sdkExists = File.Exists (sdkTestFilePath); 78 | if (sdkExists) 79 | return sdkPath; 80 | 81 | throw new InvalidOperationException ("SDK failed to extract"); 82 | } 83 | throw new InvalidOperationException ($"Failed to find SDK in {asm.Location}"); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /Catalyst.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26124.0 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Praeclarum.MacCatalyst.BuildTask", "Praeclarum.MacCatalyst\Praeclarum.MacCatalyst.BuildTask.csproj", "{6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F79AC26A-A272-437E-AF0A-0DAA7FED643B}" 9 | ProjectSection(SolutionItems) = preProject 10 | global.json = global.json 11 | EndProjectSection 12 | EndProject 13 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "maccat", "Sdk\maccat.csproj", "{ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}" 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Debug|x64 = Debug|x64 19 | Debug|x86 = Debug|x86 20 | Release|Any CPU = Release|Any CPU 21 | Release|x64 = Release|x64 22 | Release|x86 = Release|x86 23 | EndGlobalSection 24 | GlobalSection(SolutionProperties) = preSolution 25 | HideSolutionNode = FALSE 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|x64.ActiveCfg = Debug|Any CPU 31 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|x64.Build.0 = Debug|Any CPU 32 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|x86.ActiveCfg = Debug|Any CPU 33 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Debug|x86.Build.0 = Debug|Any CPU 34 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|x64.ActiveCfg = Release|Any CPU 37 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|x64.Build.0 = Release|Any CPU 38 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|x86.ActiveCfg = Release|Any CPU 39 | {6EC9AF00-0D52-4B6B-9BF0-A3A583651F72}.Release|x86.Build.0 = Release|Any CPU 40 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 41 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|Any CPU.Build.0 = Debug|Any CPU 42 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|x64.ActiveCfg = Debug|Any CPU 43 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|x64.Build.0 = Debug|Any CPU 44 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|x86.ActiveCfg = Debug|Any CPU 45 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Debug|x86.Build.0 = Debug|Any CPU 46 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|Any CPU.ActiveCfg = Release|Any CPU 47 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|Any CPU.Build.0 = Release|Any CPU 48 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|x64.ActiveCfg = Release|Any CPU 49 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|x64.Build.0 = Release|Any CPU 50 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|x86.ActiveCfg = Release|Any CPU 51 | {ED99F6DC-4D7C-42FD-A6BE-C3A0C4629765}.Release|x86.Build.0 = Release|Any CPU 52 | EndGlobalSection 53 | EndGlobal 54 | -------------------------------------------------------------------------------- /Research/HelloForms/Views/AboutPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | #2196F3 9 | #96d1ff 10 | #999999 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 38 | 50 | 63 |