├── banner.png
├── 2016-10-05 Episode 5 MVVM
├── ContactsApp
│ ├── ContactsApp.iOS
│ │ ├── iTunesArtwork
│ │ ├── iTunesArtwork@2x
│ │ ├── Resources
│ │ │ ├── Default.png
│ │ │ ├── Icon-76.png
│ │ │ ├── Default@2x.png
│ │ │ ├── Icon-60@2x.png
│ │ │ ├── Icon-60@3x.png
│ │ │ ├── Icon-76@2x.png
│ │ │ ├── Icon-Small.png
│ │ │ ├── Icon-Small-40.png
│ │ │ ├── Icon-Small@2x.png
│ │ │ ├── Icon-Small@3x.png
│ │ │ ├── Default-568h@2x.png
│ │ │ ├── Default-Portrait.png
│ │ │ ├── Icon-Small-40@2x.png
│ │ │ ├── Icon-Small-40@3x.png
│ │ │ ├── Default-Portrait@2x.png
│ │ │ └── LaunchScreen.storyboard
│ │ ├── packages.config
│ │ ├── Entitlements.plist
│ │ ├── Main.cs
│ │ ├── AppDelegate.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── Info.plist
│ │ └── ContactsApp.iOS.csproj
│ ├── ContactsApp.UWP
│ │ ├── Assets
│ │ │ ├── StoreLogo.png
│ │ │ ├── SplashScreen.scale-200.png
│ │ │ ├── LockScreenLogo.scale-200.png
│ │ │ ├── Square44x44Logo.scale-200.png
│ │ │ ├── Wide310x150Logo.scale-200.png
│ │ │ ├── Square150x150Logo.scale-200.png
│ │ │ └── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── App.xaml
│ │ ├── project.json
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Properties
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── Default.rd.xml
│ │ ├── Package.appxmanifest
│ │ ├── App.xaml.cs
│ │ └── ContactsApp.UWP.csproj
│ ├── ContactsApp.Droid
│ │ ├── Resources
│ │ │ ├── drawable
│ │ │ │ └── icon.png
│ │ │ ├── drawable-hdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xhdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xxhdpi
│ │ │ │ └── icon.png
│ │ │ ├── layout
│ │ │ │ ├── Toolbar.axml
│ │ │ │ └── Tabbar.axml
│ │ │ ├── values
│ │ │ │ └── styles.xml
│ │ │ └── AboutResources.txt
│ │ ├── Properties
│ │ │ ├── AndroidManifest.xml
│ │ │ └── AssemblyInfo.cs
│ │ ├── Assets
│ │ │ └── AboutAssets.txt
│ │ ├── MainActivity.cs
│ │ ├── packages.config
│ │ └── ContactsApp.Droid.csproj
│ └── ContactsApp
│ │ ├── GettingStarted.Xamarin
│ │ ├── packages.config
│ │ ├── Model
│ │ └── Contact.cs
│ │ ├── App.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── App.xaml.cs
│ │ ├── MainPage.xaml
│ │ ├── Properties
│ │ └── AssemblyInfo.cs
│ │ ├── ViewModels
│ │ └── AddContactViewModel.cs
│ │ └── ContactsApp.csproj
├── README.md
└── ContactsApp.sln
├── 2016-09-07 Episode 1
├── CoffeeApp
│ ├── CoffeeApp.Droid
│ │ ├── Resources
│ │ │ ├── drawable
│ │ │ │ └── Icon.png
│ │ │ ├── values
│ │ │ │ ├── Strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── layout
│ │ │ │ └── Main.axml
│ │ │ └── AboutResources.txt
│ │ ├── GettingStarted.Xamarin
│ │ ├── Assets
│ │ │ └── AboutAssets.txt
│ │ ├── app.config
│ │ ├── Properties
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── AndroidManifest.xml
│ │ ├── packages.config
│ │ ├── MainActivity.cs
│ │ └── CoffeeApp.Droid.csproj
│ ├── CoffeeApp.iOS
│ │ ├── GettingStarted.Xamarin
│ │ ├── Entitlements.plist
│ │ ├── Main.cs
│ │ ├── packages.config
│ │ ├── app.config
│ │ ├── Info.plist
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── ViewController.designer.cs
│ │ ├── ViewController.cs
│ │ ├── AppDelegate.cs
│ │ ├── Resources
│ │ │ └── LaunchScreen.xib
│ │ ├── Main.storyboard
│ │ └── CoffeeApp.iOS.csproj
│ ├── ClassLibrary1
│ │ ├── Class1.cs
│ │ ├── project.json
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── ClassLibrary1.csproj
│ ├── ClassLibrary2
│ │ ├── project.json
│ │ ├── Class1.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── ClassLibrary2.csproj
│ ├── CoffeeApp.Portable
│ │ ├── Logic
│ │ │ ├── Coffee.cs
│ │ │ ├── DistanceUtils.cs
│ │ │ └── CoffeesViewModel.cs
│ │ ├── packages.config
│ │ ├── app.config
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── CoffeeApp.Portable.csproj
│ ├── CoffeeApp.Shared
│ │ ├── Logic
│ │ │ ├── Coffee.cs
│ │ │ ├── DistanceUtils.cs
│ │ │ └── CoffeesViewModel.cs
│ │ ├── CoffeeApp.Shared.projitems
│ │ └── CoffeeApp.Shared.shproj
│ └── CoffeeApp.sln
└── README.md
├── README.md
├── 2016-09-21 Episode 3 Xamarin.Forms Performance
└── README.md
├── LICENSE
└── .gitignore
/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/banner.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/iTunesArtwork:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/iTunesArtwork
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/iTunesArtwork@2x:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/iTunesArtwork@2x
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/drawable/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/drawable/Icon.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-76.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-60@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-60@3x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-76@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small.png
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/GettingStarted.Xamarin:
--------------------------------------------------------------------------------
1 |
2 | GS\iOS\CS\iOSApp\GettingStarted.html
3 | false
4 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small@3x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable/icon.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/GettingStarted.Xamarin:
--------------------------------------------------------------------------------
1 |
2 | GS\XF\CS\App\GettingStarted.html
3 | false
4 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/GettingStarted.Xamarin:
--------------------------------------------------------------------------------
1 |
2 | GS\Android\CS\AndroidApp\GettingStarted.html
3 | false
4 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Icon-Small-40@3x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-hdpi/icon.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-xhdpi/icon.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/drawable-xxhdpi/icon.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary1/Class1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ClassLibrary1
7 | {
8 | public class Class1
9 | {
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/values/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World, Click Me!
4 | CoffeeApp.Droid
5 |
6 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3498db
4 | #1976D2
5 | #FFC107
6 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "supports": {},
3 | "dependencies": {
4 | "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
5 | "NETStandard.Library": "1.6.0"
6 | },
7 | "frameworks": {
8 | "netstandard1.4": {}
9 | }
10 | }
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jamesmontemagno/TheXamarinShow/HEAD/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/Model/Contact.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace ContactsApp.Model
8 | {
9 | class Contact
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary2/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "supports": {},
3 | "dependencies": {
4 | "AutoMapper": "5.1.1",
5 | "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
6 | "NETStandard.Library": "1.6.0"
7 | },
8 | "frameworks": {
9 | "netstandard1.4": {}
10 | }
11 | }
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary2/Class1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | using System.IO;
7 |
8 | namespace ClassLibrary2
9 | {
10 | public class Class1
11 | {
12 | FileStream stream;
13 |
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
4 | "Xamarin.Forms": "2.3.1.114"
5 | },
6 | "frameworks": {
7 | "uap10.0": {}
8 | },
9 | "runtimes": {
10 | "win10-arm": {},
11 | "win10-arm-aot": {},
12 | "win10-x86": {},
13 | "win10-x86-aot": {},
14 | "win10-x64": {},
15 | "win10-x64-aot": {}
16 | }
17 | }
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/Logic/Coffee.cs:
--------------------------------------------------------------------------------
1 | using AppServiceHelpers.Models;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace CoffeeApp.Logic
8 | {
9 | public class Coffee : EntityData
10 | {
11 | public string Name { get; set; }
12 | public double Latitude { get; set; }
13 | public double Longitude { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Shared/Logic/Coffee.cs:
--------------------------------------------------------------------------------
1 | using AppServiceHelpers.Models;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace CoffeeApp.Logic
8 | {
9 | public class Coffee : EntityData
10 | {
11 | public string Name { get; set; }
12 | public double Latitude { get; set; }
13 | public double Longitude { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using UIKit;
2 |
3 | namespace CoffeeApp
4 | {
5 | public class Application
6 | {
7 | // This is the main entry point of the application.
8 | static void Main(string[] args)
9 | {
10 | // if you want to use a different Application Delegate class from "AppDelegate"
11 | // you can specify it here.
12 | UIApplication.Main(args, null, "AppDelegate");
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/layout/Toolbar.axml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContactsApp.ViewModels;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using Xamarin.Forms;
8 |
9 | namespace ContactsApp
10 | {
11 | public partial class MainPage : ContentPage
12 | {
13 | public MainPage()
14 | {
15 | InitializeComponent();
16 | BindingContext = new AddContactViewModel();
17 |
18 | }
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.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 ContactsApp.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 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/layout/Tabbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with you package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with you package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | 
3 | [The Xamarin Show](https://channel9.msdn.com/Shows/XamarinShow?WT.mc_id=friends-0000-jamont) is all about native cross-platform mobile development for iOS, Android, macOS, and Windows with [Xamarin](http://xamarin.com). Join your host James Montemagno and his guests as they discuss building mobiles apps, integrating SDKs, extending mobile apps, the latest Xamarin news, awesome apps developers are building, and so much more. Follow [@JamesMontemagno](http://twitter.com/jamesmontemagno) and send him topics with #XamarinShow of what and who you would like to see on the show.
4 |
5 |
6 | Here you will find links to show notes and source code from the show.
7 |
8 | Additionally, you can open a new Issue to request specific topics you would like to see covered!
9 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | namespace ContactsApp.UWP
17 | {
18 | public sealed partial class MainPage
19 | {
20 | public MainPage()
21 | {
22 | this.InitializeComponent();
23 |
24 | LoadApplication(new ContactsApp.App());
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | using Xamarin.Forms;
7 |
8 | namespace ContactsApp
9 | {
10 | public partial class App : Application
11 | {
12 | public App()
13 | {
14 | InitializeComponent();
15 |
16 | MainPage = new ContactsApp.MainPage();
17 | }
18 |
19 | protected override void OnStart()
20 | {
21 | // Handle when your app starts
22 | }
23 |
24 | protected override void OnSleep()
25 | {
26 | // Handle when your app sleeps
27 | }
28 |
29 | protected override void OnResume()
30 | {
31 | // Handle when your app resumes
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Shared/CoffeeApp.Shared.projitems:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
5 | true
6 | 39256258-7349-499d-b235-05934db20ee3
7 |
8 |
9 | CoffeeApp.Shared
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Android.App;
4 | using Android.Content.PM;
5 | using Android.Runtime;
6 | using Android.Views;
7 | using Android.Widget;
8 | using Android.OS;
9 |
10 | namespace ContactsApp.Droid
11 | {
12 | [Activity(Label = "ContactsApp", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
13 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
14 | {
15 | protected override void OnCreate(Bundle bundle)
16 | {
17 | TabLayoutResource = Resource.Layout.Tabbar;
18 | ToolbarResource = Resource.Layout.Toolbar;
19 |
20 | base.OnCreate(bundle);
21 |
22 | global::Xamarin.Forms.Forms.Init(this, bundle);
23 | LoadApplication(new App());
24 | }
25 | }
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/README.md:
--------------------------------------------------------------------------------
1 | ### 5: MVVM & Data Binding with Xamarin.Forms
2 | Out of all architectural patterns Model-View-ViewModel, or MVVM, has to be my favorite. MVVM enables developers to separate their business logic from their user interface code no matter if you are developing with iOS Storyboards, Android XML, or Xamarin.Forms XAML. In this episode I cover the basic building blocks of the MVVM pattern and then introduce you to the build in data binding framework built right into Xamarin.Forms so there is no need to ever manually set a text property, register for a click handler, and automatically enable and disable controls with Commands.
3 |
4 | ### Video Recording:
5 | * Video: https://channel9.msdn.com/Shows/XamarinShow/Introduction-to-MVVM
6 |
7 |
8 | ### Follow Me
9 | * Blog: http://motzcod.es
10 | * Twitter: http://www.twitter.com/jamesmontemagno
11 | * GitHub: http://github.com/jamesmontemagno
12 | * Weekly Podcast: http://mergeconflict.fm
13 | * The Xamarin Show: https://channel9.msdn.com/Shows/XamarinShow
14 |
15 |
16 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/2016-09-21 Episode 3 Xamarin.Forms Performance/README.md:
--------------------------------------------------------------------------------
1 | ### 3: Xamarin.Forms Performance Tips and Tricks
2 | On this weeks The Xamarin Show we take a look at some top tips and tricks to create highly performance mobile applications with Xamarin.Forms. We take a look at some of the latest features built right into Xamarin.Forms that can dramatically increase an app performance across all platforms. Then we see how to simplify view hierarchies and optimize list of data with Template Selectors.
3 |
4 | ### Video Recording:
5 | * Video: https://channel9.msdn.com/Shows/XamarinShow/XamarinForms-Performance-Tips-and-Tricks
6 |
7 | ### Code:
8 | * [Xamarin Evolve Conference App](http://github.com/xamarinhq/app-evolve)
9 | * [My Weather App](http://github.com/jamesmontemagno/MyWeather.Forms)
10 |
11 | ### Follow Me
12 | * Blog: http://motzcod.es
13 | * Twitter: http://www.twitter.com/jamesmontemagno
14 | * GitHub: http://github.com/jamesmontemagno
15 | * Weekly Podcast: http://mergeconflict.fm
16 | * The Xamarin Show: https://channel9.msdn.com/Shows/XamarinShow
17 |
18 |
19 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Shared/Logic/DistanceUtils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace CoffeeApp.Logic
7 | {
8 | public static class DistanceUtils
9 | {
10 | public static double MilesToLatitudeDegrees(double miles)
11 | {
12 | double earthRadius = 3960.0; // in miles
13 | double radiansToDegrees = 180.0 / Math.PI;
14 | return (miles / earthRadius) * radiansToDegrees;
15 | }
16 |
17 | public static double MilesToLongitudeDegrees(double miles, double atLatitude)
18 | {
19 | double earthRadius = 3960.0; // in miles
20 | double degreesToRadians = Math.PI / 180.0;
21 | double radiansToDegrees = 180.0 / Math.PI;
22 | // derive the earth's radius at that point in latitude
23 | double radiusAtLatitude = earthRadius * Math.Cos(atLatitude * degreesToRadians);
24 | return (miles / radiusAtLatitude) * radiansToDegrees;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/Logic/DistanceUtils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace CoffeeApp.Logic
7 | {
8 | public static class DistanceUtils
9 | {
10 | public static double MilesToLatitudeDegrees(double miles)
11 | {
12 | double earthRadius = 3960.0; // in miles
13 | double radiansToDegrees = 180.0 / Math.PI;
14 | return (miles / earthRadius) * radiansToDegrees;
15 | }
16 |
17 | public static double MilesToLongitudeDegrees(double miles, double atLatitude)
18 | {
19 | double earthRadius = 3960.0; // in miles
20 | double degreesToRadians = Math.PI / 180.0;
21 | double radiansToDegrees = 180.0 / Math.PI;
22 | // derive the earth's radius at that point in latitude
23 | double radiusAtLatitude = earthRadius * Math.Cos(atLatitude * degreesToRadians);
24 | return (miles / radiusAtLatitude) * radiansToDegrees;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 James Montemagno
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Shared/CoffeeApp.Shared.shproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 39256258-7349-499d-b235-05934db20ee3
5 | 14.0
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDisplayName
6 | CoffeeApp
7 | CFBundleIdentifier
8 | com.companyname.CoffeeApp
9 | CFBundleShortVersionString
10 | 1.0
11 | CFBundleVersion
12 | 1.0
13 | LSRequiresIPhoneOS
14 |
15 | MinimumOSVersion
16 |
17 | UIDeviceFamily
18 |
19 | 1
20 |
21 | UILaunchStoryboardName
22 | LaunchScreen
23 | UIMainStoryboardFile
24 | Main
25 | UIRequiredDeviceCapabilities
26 |
27 | armv7
28 |
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 |
36 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/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("ContactsApp.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("ContactsApp.UWP")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/layout/Main.axml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
10 |
16 |
22 |
23 |
28 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 | using Android.App;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("CoffeeApp.Droid")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("CoffeeApp.Droid")]
14 | [assembly: AssemblyCopyright("Copyright © 2016")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: ComVisible(false)]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary1/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Resources;
2 | using System.Reflection;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("ClassLibrary1")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("ClassLibrary1")]
14 | [assembly: AssemblyCopyright("Copyright © 2016")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: NeutralResourcesLanguage("en")]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary2/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Resources;
2 | using System.Reflection;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("ClassLibrary2")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("ClassLibrary2")]
14 | [assembly: AssemblyCopyright("Copyright © 2016")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: NeutralResourcesLanguage("en")]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Resources;
2 | using System.Reflection;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("ContactsApp")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("ContactsApp")]
14 | [assembly: AssemblyCopyright("Copyright © 2014")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: NeutralResourcesLanguage("en")]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Resources;
2 | using System.Reflection;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("CoffeeApp.Portable")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("CoffeeApp.Portable")]
14 | [assembly: AssemblyCopyright("Copyright © 2016")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: NeutralResourcesLanguage("en")]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.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 ContactsApp.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 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/README.md:
--------------------------------------------------------------------------------
1 | ### 1: Sharing Code Across iOS, Android, and Windows
2 | Welcome to The Xamarin Show, your weekly native cross-platform mobile development show with your host James Montemagno. Each week join James and his guests as they discuss building mobiles apps, integrating SDKs, extending mobile apps, the latest Xamarin news, awesome apps developers are building, and so much more. On this weeks episode we take a look at how to share code across iOS, Android, and all of the Windows platforms. There are many strategies to help share code across a single application or across several applications and we explore all of them!
3 |
4 | ### Video Recording:
5 | * Video: https://channel9.msdn.com/Shows/XamarinShow/Sharing-Code-Across-iOS-Android-and-Windows
6 |
7 | ### Project Setup
8 | * Setup an Azure Mobile App Backend (QuickStart) and create a table called **Coffee**. Fill in the azure backend in the CoffeesViewModel.cs
9 | * For Android you will have to setup and obtain your API key from Google: https://developer.xamarin.com/guides/android/platform_features/maps_and_location/maps/obtaining_a_google_maps_api_key/
10 |
11 | ### Follow Me
12 | * Blog: http://motzcod.es
13 | * Twitter: http://www.twitter.com/jamesmontemagno
14 | * GitHub: http://github.com/jamesmontemagno
15 | * Weekly Podcast: http://mergeconflict.fm
16 | * The Xamarin Show: https://channel9.msdn.com/Shows/XamarinShow
17 |
18 |
19 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 | using Android.App;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("ContactsApp.Droid")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("ContactsApp.Droid")]
14 | [assembly: AssemblyCopyright("Copyright © 2014")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: ComVisible(false)]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | //
26 | // You can specify all the values or you can default the Build and Revision Numbers
27 | // by using the '*' as shown below:
28 | // [assembly: AssemblyVersion("1.0.*")]
29 | [assembly: AssemblyVersion("1.0.0.0")]
30 | [assembly: AssemblyFileVersion("1.0.0.0")]
31 |
32 | // Add some common permissions, these can be removed if not needed
33 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)]
34 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
35 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
26 |
27 |
30 |
31 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.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("CoffeeApp")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("CoffeeApp")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
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("e3b5a13b-3e59-4541-a4e5-79f9e7352443")]
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 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/ViewController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Xamarin 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 CoffeeApp
13 | {
14 | [Register ("ViewController")]
15 | partial class ViewController
16 | {
17 | [Outlet]
18 | [GeneratedCode ("iOS Designer", "1.0")]
19 | UIKit.UIButton MyButtonLoadData { get; set; }
20 |
21 | [Outlet]
22 | [GeneratedCode ("iOS Designer", "1.0")]
23 | UIKit.UIButton MyButtonPin { get; set; }
24 |
25 | [Outlet]
26 | [GeneratedCode ("iOS Designer", "1.0")]
27 | MapKit.MKMapView MyMap { get; set; }
28 |
29 | [Action ("MyButtonPin_TouchUpInside:")]
30 | [GeneratedCode ("iOS Designer", "1.0")]
31 | partial void MyButtonPin_TouchUpInside (UIKit.UIButton sender);
32 |
33 | void ReleaseDesignerOutlets ()
34 | {
35 | if (MyButtonLoadData != null) {
36 | MyButtonLoadData.Dispose ();
37 | MyButtonLoadData = null;
38 | }
39 |
40 | if (MyButtonPin != null) {
41 | MyButtonPin.Dispose ();
42 | MyButtonPin = null;
43 | }
44 |
45 | if (MyMap != null) {
46 | MyMap.Dispose ();
47 | MyMap = null;
48 | }
49 | }
50 | }
51 | }
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.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("ContactsApp.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("ContactsApp.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 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Portable/Logic/CoffeesViewModel.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Threading.Tasks;
3 |
4 | using AppServiceHelpers;
5 | using AppServiceHelpers.Abstractions;
6 |
7 | namespace CoffeeApp.Logic
8 | {
9 | public class CoffeesViewModel
10 | {
11 | ITableDataStore table;
12 |
13 | public CoffeesViewModel()
14 | {
15 |
16 | // 1. Create a new EasyMobileServiceClient.
17 | var client = EasyMobileServiceClient.Create();
18 |
19 | // 2. Initialize the library with the URL of the Azure Mobile App you created in Step #1.
20 |
21 | client.Initialize("https://motzcoffee.azurewebsites.net");
22 |
23 | // 3. Register a model with the EasyMobileServiceClient to create a table.
24 | client.RegisterTable();
25 |
26 | // 4. Finalize the schema for our database. All table registrations must be done before this step.
27 | client.FinalizeSchema();
28 |
29 | table = client.Table();
30 | }
31 |
32 | public Task> GetCoffees() => table.GetItemsAsync();
33 |
34 |
35 | public Task AddCoffee(string name, double latitude, double longitude)
36 | {
37 | return table.AddAsync(new Coffee
38 | {
39 | Name = name,
40 | Latitude = latitude,
41 | Longitude = longitude
42 | });
43 | }
44 |
45 | public Task GetNameForLocation(double latitude, double longitude)
46 | {
47 |
48 | return Task.FromResult("unknown");
49 | }
50 |
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.UWP/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
13 |
14 |
15 |
16 |
17 | ContactsApp.UWP
18 | Motz
19 | Assets\StoreLogo.png
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.axml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable/
12 | icon.png
13 |
14 | layout/
15 | main.axml
16 |
17 | values/
18 | strings.xml
19 |
20 | In order to get the build system to recognize Android resources, set the build action to
21 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
22 | instead operate on resource IDs. When you compile an Android application that uses resources,
23 | the build system will package the resources for distribution and generate a class called "R"
24 | (this is an Android convention) that contains the tokens for each one of the resources
25 | included. For example, for the above Resources layout, this is what the R class would expose:
26 |
27 | public class R {
28 | public class drawable {
29 | public const int icon = 0x123;
30 | }
31 |
32 | public class layout {
33 | public const int main = 0x456;
34 | }
35 |
36 | public class strings {
37 | public const int first_string = 0xabc;
38 | public const int second_string = 0xbcd;
39 | }
40 | }
41 |
42 | You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
43 | to reference the layout/main.axml file, or R.strings.first_string to reference the first
44 | string in the dictionary file values/strings.xml.
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.Droid/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.xml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable-hdpi/
12 | icon.png
13 |
14 | drawable-ldpi/
15 | icon.png
16 |
17 | drawable-mdpi/
18 | icon.png
19 |
20 | layout/
21 | main.xml
22 |
23 | values/
24 | strings.xml
25 |
26 | In order to get the build system to recognize Android resources, set the build action to
27 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
28 | instead operate on resource IDs. When you compile an Android application that uses resources,
29 | the build system will package the resources for distribution and generate a class called
30 | "Resource" that contains the tokens for each one of the resources included. For example,
31 | for the above Resources layout, this is what the Resource class would expose:
32 |
33 | public class Resource {
34 | public class drawable {
35 | public const int icon = 0x123;
36 | }
37 |
38 | public class layout {
39 | public const int main = 0x456;
40 | }
41 |
42 | public class strings {
43 | public const int first_string = 0xabc;
44 | public const int second_string = 0xbcd;
45 | }
46 | }
47 |
48 | You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
49 | to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
50 | string in the dictionary file values/strings.xml.
51 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.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 | 6.0
25 | CFBundleDisplayName
26 | ContactsApp
27 | CFBundleIdentifier
28 | com.yourcompany.ContactsApp
29 | CFBundleVersion
30 | 1.0
31 | CFBundleIconFiles
32 |
33 | Icon-60@2x
34 | Icon-60@3x
35 | Icon-76
36 | Icon-76@2x
37 | Default
38 | Default@2x
39 | Default-568h@2x
40 | Default-Portrait
41 | Default-Portrait@2x
42 | Icon-Small-40
43 | Icon-Small-40@2x
44 | Icon-Small-40@3x
45 | Icon-Small
46 | Icon-Small@2x
47 | Icon-Small@3x
48 |
49 | UILaunchStoryboardName
50 | LaunchScreen
51 |
52 |
53 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/ViewController.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using UIKit;
4 | using System.Linq;
5 | using MapKit;
6 | using CoreLocation;
7 | using CoffeeApp.Logic;
8 |
9 | namespace CoffeeApp
10 | {
11 | public partial class ViewController : UIViewController
12 | {
13 | public ViewController(IntPtr handle) : base(handle)
14 | {
15 | }
16 |
17 | CoffeesViewModel viewModel;
18 | public override void ViewDidLoad()
19 | {
20 | base.ViewDidLoad();
21 |
22 |
23 | viewModel = new CoffeesViewModel();
24 |
25 | MyButtonLoadData.TouchUpInside += async (sender, args) =>
26 | {
27 | MyButtonLoadData.Enabled = false;
28 | MyMap.RemoveAnnotations(MyMap.Annotations);
29 |
30 | var coffees = await viewModel.GetCoffees();
31 |
32 | foreach (var coffee in coffees)
33 | {
34 | MyMap.AddAnnotation(new MKPointAnnotation
35 | {
36 | Coordinate = new CLLocationCoordinate2D(coffee.Latitude, coffee.Longitude),
37 | Title = coffee.Name
38 | });
39 | }
40 |
41 | MyButtonLoadData.Enabled = true;
42 |
43 | };
44 |
45 |
46 | ZoomToSeattle();
47 | }
48 |
49 | void ZoomToSeattle()
50 | {
51 |
52 | var coords = new CLLocationCoordinate2D(47.6062, -122.3321);
53 | var span = new MKCoordinateSpan(DistanceUtils.MilesToLatitudeDegrees(20),
54 | DistanceUtils.MilesToLongitudeDegrees(20, coords.Latitude));
55 |
56 | MyMap.Region = new MKCoordinateRegion(coords, span);
57 | }
58 |
59 |
60 | async partial void MyButtonPin_TouchUpInside(UIButton sender)
61 | {
62 | var center = MyMap.Region.Center;
63 |
64 | var title = await viewModel.GetNameForLocation(center.Latitude, center.Longitude);
65 |
66 | MyMap.AddAnnotation(new MKPointAnnotation
67 | {
68 | Coordinate = center,
69 | Title = title
70 | });
71 | }
72 |
73 | public override void DidReceiveMemoryWarning()
74 | {
75 | base.DidReceiveMemoryWarning();
76 | // Release any cached data, images, etc that aren't in use.
77 | }
78 |
79 | }
80 | }
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary1/ClassLibrary1.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 14.0
6 | Debug
7 | AnyCPU
8 | {49604FF2-6CAF-4B0A-8CE3-0D87A0F08F59}
9 | Library
10 | Properties
11 | ClassLibrary1
12 | ClassLibrary1
13 | en-US
14 | 512
15 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
16 |
17 |
18 | v5.0
19 |
20 |
21 | true
22 | full
23 | false
24 | bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 |
29 |
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
53 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/ClassLibrary2/ClassLibrary2.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 14.0
6 | Debug
7 | AnyCPU
8 | {CF6E7111-7607-4D74-B3A7-99AD14F995B6}
9 | Library
10 | Properties
11 | ClassLibrary2
12 | ClassLibrary2
13 | en-US
14 | 512
15 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
16 |
17 |
18 | v5.0
19 |
20 |
21 | true
22 | full
23 | false
24 | bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 |
29 |
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
53 |
--------------------------------------------------------------------------------
/2016-10-05 Episode 5 MVVM/ContactsApp/ContactsApp.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 |
40 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Shared/Logic/CoffeesViewModel.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Threading.Tasks;
3 |
4 | using AppServiceHelpers;
5 | using AppServiceHelpers.Abstractions;
6 | using System.Linq;
7 | #if __IOS__
8 | using CoreLocation;
9 | #elif __ANDROID__
10 | using Android.Content;
11 | using Android.Locations;
12 | #endif
13 |
14 | namespace CoffeeApp.Logic
15 | {
16 | public class CoffeesViewModel
17 | {
18 | ITableDataStore table;
19 |
20 | public CoffeesViewModel()
21 | {
22 |
23 | // 1. Create a new EasyMobileServiceClient.
24 | var client = EasyMobileServiceClient.Create();
25 |
26 | // 2. Initialize the library with the URL of the Azure Mobile App you created in Step #1.
27 |
28 | client.Initialize("https://YOUR_URL_HERE.azurewebsites.net");
29 |
30 | // 3. Register a model with the EasyMobileServiceClient to create a table.
31 | client.RegisterTable();
32 |
33 | // 4. Finalize the schema for our database. All table registrations must be done before this step.
34 | client.FinalizeSchema();
35 |
36 | table = client.Table();
37 | }
38 |
39 | public Task> GetCoffees() => table.GetItemsAsync();
40 |
41 |
42 | public Task AddCoffee(string name, double latitude, double longitude)
43 | {
44 | return table.AddAsync(new Coffee
45 | {
46 | Name = name,
47 | Latitude = latitude,
48 | Longitude = longitude
49 | });
50 | }
51 |
52 | #if __IOS__
53 | public async Task GetNameForLocation(double latitude, double longitude)
54 | {
55 |
56 | var coder = new CLGeocoder();
57 |
58 | var locations = await coder.ReverseGeocodeLocationAsync(new CLLocation
59 | (latitude, longitude));
60 |
61 | var name = locations?.FirstOrDefault()?.Name ?? "unknown";
62 |
63 |
64 | await AddCoffee(name, latitude, longitude);
65 |
66 | return name;
67 | }
68 | #elif __ANDROID__
69 | public async Task GetNameForLocation(Context context, double latitude, double longitude)
70 | {
71 |
72 | var coder = new Geocoder(context);
73 | var locations = await coder.GetFromLocationAsync(latitude, longitude, 1);
74 |
75 | var name = $"{locations?.FirstOrDefault()?.SubThoroughfare ?? string.Empty} " +
76 | $"{locations?.FirstOrDefault()?.Thoroughfare ?? string.Empty}";
77 |
78 | await AddCoffee(name, latitude, longitude);
79 |
80 | return name;
81 | }
82 | #endif
83 |
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using Foundation;
2 | using UIKit;
3 |
4 | namespace CoffeeApp
5 | {
6 | // The UIApplicationDelegate for the application. This class is responsible for launching the
7 | // User Interface of the application, as well as listening (and optionally responding) to
8 | // application events from iOS.
9 | [Register("AppDelegate")]
10 | public class AppDelegate : UIApplicationDelegate
11 | {
12 | // class-level declarations
13 |
14 | public override UIWindow Window
15 | {
16 | get;
17 | set;
18 | }
19 |
20 | public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
21 | {
22 | // Override point for customization after application launch.
23 | // If not required for your application you can safely delete this method
24 |
25 | Microsoft.WindowsAzure.MobileServices.CurrentPlatform.Init();
26 | SQLitePCL.CurrentPlatform.Init();
27 |
28 | return true;
29 | }
30 |
31 | public override void OnResignActivation(UIApplication application)
32 | {
33 | // Invoked when the application is about to move from active to inactive state.
34 | // This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message)
35 | // or when the user quits the application and it begins the transition to the background state.
36 | // Games should use this method to pause the game.
37 | }
38 |
39 | public override void DidEnterBackground(UIApplication application)
40 | {
41 | // Use this method to release shared resources, save user data, invalidate timers and store the application state.
42 | // If your application supports background exection this method is called instead of WillTerminate when the user quits.
43 | }
44 |
45 | public override void WillEnterForeground(UIApplication application)
46 | {
47 | // Called as part of the transiton from background to active state.
48 | // Here you can undo many of the changes made on entering the background.
49 | }
50 |
51 | public override void OnActivated(UIApplication application)
52 | {
53 | // Restart any tasks that were paused (or not yet started) while the application was inactive.
54 | // If the application was previously in the background, optionally refresh the user interface.
55 | }
56 |
57 | public override void WillTerminate(UIApplication application)
58 | {
59 | // Called when the application is about to terminate. Save data, if needed. See also DidEnterBackground.
60 | }
61 | }
62 | }
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.iOS/Resources/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
21 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/2016-09-07 Episode 1/CoffeeApp/CoffeeApp.Droid/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Android.App;
3 | using Android.Widget;
4 | using Android.OS;
5 |
6 | using System.Linq;
7 | using Android.Gms.Maps;
8 | using Android.Gms.Maps.Model;
9 | using Android.Locations;
10 |
11 | using CoffeeApp.Logic;
12 |
13 | namespace CoffeeApp.Droid
14 | {
15 | [Activity(Label = "Coffee App", MainLauncher = true, Icon = "@drawable/icon")]
16 | public class MainActivity : Activity, IOnMapReadyCallback
17 | {
18 |
19 | GoogleMap map;
20 | MapFragment mapFragment;
21 |
22 | Button addPin, loadCoffee;
23 | Handler handler;
24 |
25 | CoffeesViewModel viewModel;
26 |
27 |
28 | protected override void OnCreate(Bundle bundle)
29 | {
30 | base.OnCreate(bundle);
31 |
32 | // Set our view from the "main" layout resource
33 | SetContentView(Resource.Layout.Main);
34 |
35 | Microsoft.WindowsAzure.MobileServices.CurrentPlatform.Init();
36 |
37 | viewModel = new CoffeesViewModel();
38 |
39 | handler = new Handler();
40 |
41 | mapFragment = FragmentManager.FindFragmentById(Resource.Id.map);
42 |
43 | addPin = FindViewById