├── .gitattributes
├── .github
└── workflows
│ └── ci.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── Xamarin.Forms.Background.nuspec
├── build.bat
├── images
└── newsfeed.gif
├── scripts
└── msbuild.bat
└── src
├── SampleBackground
├── SampleBackground.Android
│ ├── Assets
│ │ └── AboutAssets.txt
│ ├── MainActivity.cs
│ ├── Properties
│ │ ├── AndroidManifest.xml
│ │ └── AssemblyInfo.cs
│ ├── Resources
│ │ ├── AboutResources.txt
│ │ ├── Resource.designer.cs
│ │ ├── layout
│ │ │ ├── Main.axml
│ │ │ ├── Tabbar.axml
│ │ │ └── Toolbar.axml
│ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-ldpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ └── values
│ │ │ ├── Strings.xml
│ │ │ └── styles.xml
│ └── SampleBackground.Android.csproj
├── SampleBackground.UWP
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Assets
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Package.appxmanifest
│ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ └── SampleBackground.UWP.csproj
├── SampleBackground.iOS
│ ├── AppDelegate.cs
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@1x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-76x76@3x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ ├── Icon-Small-50x50@1x.png
│ │ │ ├── Icon-Small-50x50@2x.png
│ │ │ └── ItunesArtwork@2x.png
│ │ └── Contents.json
│ ├── Entitlements.plist
│ ├── Info.plist
│ ├── Main.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Resources
│ │ ├── Default-568h@2x.png
│ │ ├── Default-Portrait.png
│ │ ├── Default-Portrait@2x.png
│ │ ├── Default.png
│ │ ├── Default@2x.png
│ │ └── LaunchScreen.storyboard
│ ├── SampleBackground.iOS.csproj
│ ├── iTunesArtwork@1x.png
│ ├── iTunesArtwork@2x.png
│ └── iTunesArtwork@3x.png
└── SampleBackground
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Models
│ └── RssData.cs
│ ├── SampleBackground.csproj
│ ├── Services
│ ├── BaseRssFeed.cs
│ ├── IRssParserService.cs
│ ├── PeriodicBBCNewsRssFeed.cs
│ ├── PeriodicCNNRssFeed.cs
│ ├── PeriodicWashingtonPostRssFeed.cs
│ └── RSSParserService.cs
│ ├── ViewModels
│ ├── MainPageViewModel.cs
│ ├── NewLandingPageViewModel.cs
│ └── ViewModelBase.cs
│ └── Views
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── NewLandingPage.xaml
│ └── NewLandingPage.xaml.cs
├── Xamarin.Forms.Background.Android
├── ActivityExtension.cs
├── BackgroundService.cs
├── Properties
│ └── AssemblyInfo.cs
├── Resources
│ └── Resource.Designer.cs
└── Xamarin.Forms.Background.Android.csproj
├── Xamarin.Forms.Background.Gtk
├── AppDelegateExtension.cs
├── BackgroundGtkObject.cs
├── Properties
│ └── AssemblyInfo.cs
└── Xamarin.Forms.Background.Gtk.csproj
├── Xamarin.Forms.Background.Mac
├── AppDelegateExtension.cs
├── Properties
│ └── AssemblyInfo.cs
└── Xamarin.Forms.Background.Mac.csproj
├── Xamarin.Forms.Background.Tizen
├── ApplicationExtension.cs
└── Xamarin.Forms.Background.Tizen.csproj
├── Xamarin.Forms.Background.UWP
├── BackgrounService.cs
├── Properties
│ ├── AssemblyInfo.cs
│ └── BackgroundService.UWP.rd.xml
├── WindowsPageExtension.cs
└── Xamarin.Forms.Background.UWP.csproj
├── Xamarin.Forms.Background.iOS
├── AppDelegateExtension.cs
├── BackgroundService.cs
├── Properties
│ └── AssemblyInfo.cs
└── Xamarin.Forms.Background.iOS.csproj
├── Xamarin.Forms.Background.sln
└── Xamarin.Forms.Background
├── BackgroundAggregatorService.cs
├── BackgroundSharedService.cs
├── IBackgroundTask.cs
├── StartLongRunningTask.cs
├── StopLongRunningTask.cs
└── Xamarin.Forms.Background.csproj
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: ci
2 | on: push
3 |
4 | jobs:
5 | build_and_deploy:
6 | runs-on: windows-latest
7 | steps:
8 | - uses: actions/checkout@v1
9 | - name: Build
10 | shell: cmd
11 | run: |
12 | build.bat
13 | - name: Package and upload
14 | run: |
15 | git clone https://github.com/nblockchain/fsx
16 | .\fsx\Tools\fsi.bat fsx\Tools\nugetPush.fsx 0.10 ${{secrets.NUGET_API_KEY}}
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 | [Nn]uget/
25 |
26 | # Visual Studio 2015 cache/options directory
27 | .vs/
28 | # Uncomment if you have tasks that create the project's static files in wwwroot
29 | #wwwroot/
30 |
31 | # MSTest test Results
32 | [Tt]est[Rr]esult*/
33 | [Bb]uild[Ll]og.*
34 |
35 | # NUNIT
36 | *.VisualState.xml
37 | TestResult.xml
38 |
39 | # Build Results of an ATL Project
40 | [Dd]ebugPS/
41 | [Rr]eleasePS/
42 | dlldata.c
43 |
44 | # DNX
45 | project.lock.json
46 | project.fragment.lock.json
47 | artifacts/
48 |
49 | *_i.c
50 | *_p.c
51 | *_i.h
52 | *.ilk
53 | *.meta
54 | *.obj
55 | *.pch
56 | *.pdb
57 | *.pgc
58 | *.pgd
59 | *.rsp
60 | *.sbr
61 | *.tlb
62 | *.tli
63 | *.tlh
64 | *.tmp
65 | *.tmp_proj
66 | *.log
67 | *.vspscc
68 | *.vssscc
69 | .builds
70 | *.pidb
71 | *.svclog
72 | *.scc
73 |
74 | # Chutzpah Test files
75 | _Chutzpah*
76 |
77 | # Visual C++ cache files
78 | ipch/
79 | *.aps
80 | *.ncb
81 | *.opendb
82 | *.opensdf
83 | *.sdf
84 | *.cachefile
85 | *.VC.db
86 | *.VC.VC.opendb
87 |
88 | # Visual Studio profiler
89 | *.psess
90 | *.vsp
91 | *.vspx
92 | *.sap
93 |
94 | # TFS 2012 Local Workspace
95 | $tf/
96 |
97 | # Guidance Automation Toolkit
98 | *.gpState
99 |
100 | # ReSharper is a .NET coding add-in
101 | _ReSharper*/
102 | *.[Rr]e[Ss]harper
103 | *.DotSettings.user
104 |
105 | # JustCode is a .NET coding add-in
106 | .JustCode
107 |
108 | # TeamCity is a build add-in
109 | _TeamCity*
110 |
111 | # DotCover is a Code Coverage Tool
112 | *.dotCover
113 |
114 | # NCrunch
115 | _NCrunch_*
116 | .*crunch*.local.xml
117 | nCrunchTemp_*
118 |
119 | # MightyMoose
120 | *.mm.*
121 | AutoTest.Net/
122 |
123 | # Web workbench (sass)
124 | .sass-cache/
125 |
126 | # Installshield output folder
127 | [Ee]xpress/
128 |
129 | # DocProject is a documentation generator add-in
130 | DocProject/buildhelp/
131 | DocProject/Help/*.HxT
132 | DocProject/Help/*.HxC
133 | DocProject/Help/*.hhc
134 | DocProject/Help/*.hhk
135 | DocProject/Help/*.hhp
136 | DocProject/Help/Html2
137 | DocProject/Help/html
138 |
139 | # Click-Once directory
140 | publish/
141 |
142 | # Publish Web Output
143 | *.[Pp]ublish.xml
144 | *.azurePubxml
145 | # TODO: Comment the next line if you want to checkin your web deploy settings
146 | # but database connection strings (with potential passwords) will be unencrypted
147 | #*.pubxml
148 | *.publishproj
149 |
150 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
151 | # checkin your Azure Web App publish settings, but sensitive information contained
152 | # in these scripts will be unencrypted
153 | PublishScripts/
154 |
155 | # NuGet Packages
156 | *.nupkg
157 | # The packages folder can be ignored because of Package Restore
158 | **/packages/*
159 | # except build/, which is used as an MSBuild target.
160 | !**/packages/build/
161 | # Uncomment if necessary however generally it will be regenerated when needed
162 | #!**/packages/repositories.config
163 | # NuGet v3's project.json files produces more ignoreable files
164 | *.nuget.props
165 | *.nuget.targets
166 |
167 | # Microsoft Azure Build Output
168 | csx/
169 | *.build.csdef
170 |
171 | # Microsoft Azure Emulator
172 | ecf/
173 | rcf/
174 |
175 | # Windows Store app package directories and files
176 | AppPackages/
177 | BundleArtifacts/
178 | Package.StoreAssociation.xml
179 | _pkginfo.txt
180 |
181 | # Visual Studio cache files
182 | # files ending in .cache can be ignored
183 | *.[Cc]ache
184 | # but keep track of directories ending in .cache
185 | !*.[Cc]ache/
186 |
187 | # Others
188 | ClientBin/
189 | ~$*
190 | *~
191 | *.dbmdl
192 | *.dbproj.schemaview
193 | *.jfm
194 | *.pfx
195 | *.publishsettings
196 | node_modules/
197 | orleans.codegen.cs
198 |
199 | # Since there are multiple workflows, uncomment next line to ignore bower_components
200 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
201 | #bower_components/
202 |
203 | # RIA/Silverlight projects
204 | Generated_Code/
205 |
206 | # Backup & report files from converting an old project file
207 | # to a newer Visual Studio version. Backup files are not needed,
208 | # because we have git ;-)
209 | _UpgradeReport_Files/
210 | Backup*/
211 | UpgradeLog*.XML
212 | UpgradeLog*.htm
213 |
214 | # SQL Server files
215 | *.mdf
216 | *.ldf
217 |
218 | # Business Intelligence projects
219 | *.rdl.data
220 | *.bim.layout
221 | *.bim_*.settings
222 |
223 | # Microsoft Fakes
224 | FakesAssemblies/
225 |
226 | # GhostDoc plugin setting file
227 | *.GhostDoc.xml
228 |
229 | # Node.js Tools for Visual Studio
230 | .ntvs_analysis.dat
231 |
232 | # Visual Studio 6 build log
233 | *.plg
234 |
235 | # Visual Studio 6 workspace options file
236 | *.opt
237 |
238 | # Visual Studio LightSwitch build output
239 | **/*.HTMLClient/GeneratedArtifacts
240 | **/*.DesktopClient/GeneratedArtifacts
241 | **/*.DesktopClient/ModelManifest.xml
242 | **/*.Server/GeneratedArtifacts
243 | **/*.Server/ModelManifest.xml
244 | _Pvt_Extensions
245 |
246 | # Paket dependency manager
247 | .paket/paket.exe
248 | paket-files/
249 |
250 | # FAKE - F# Make
251 | .fake/
252 |
253 | # JetBrains Rider
254 | .idea/
255 | *.sln.iml
256 |
257 | # CodeRush
258 | .cr/
259 |
260 | # Python Tools for Visual Studio (PTVS)
261 | __pycache__/
262 | *.pyc
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Version 1.0.5473
2 | * Support for GTK, MAC and Tizen platform was added
3 |
4 | # Version 1.0.5463
5 | * Support for UWP platform was added
6 |
7 | # Version 1.0.5461
8 | * Support for Non-Repeatable execution of IPeriodicTask
9 |
10 |
11 | # Version 1.0.5460
12 | * [Android] Fixes for build and missing library issue
13 | * [iOS] Fixes for build and missing library issue
14 |
15 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Winston Gubantes / Matcha LLC
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Xamarin.Forms.Background (Background plugin for Xamarin.Forms)
2 |
3 | A plugin library to simplify Backgrounding in Xamarin.Forms.
4 |
5 |
6 | ## Get Started
7 |
8 | Ever wonder how facebook and twitter process there background to fetch a new content? And it looks so slick that when you refresh it was snappy and smooth, Making the user believed that the content is refreshed and updated in a snap when in fact it was done in the background.
9 |
10 | The secret behind it was the background service. And so we have created Xamarin.Forms.Background to make our backgrounding task be simple and maintenable.
11 |
12 | ## Build & Test Status
13 |
14 | * [](https://github.com/nblockchain/XamarinFormsBackground/actions)
15 |
16 | ## Setup
17 |
18 | * NuGet: [Xamarin.Forms.Background](https://www.nuget.org/packages/Xamarin.Forms.Background) [](https://www.nuget.org/packages/Xamarin.Forms.Background/)
19 | * Install into ALL of your projects, including client projects.
20 | * Initialize `BackgroundAggregator` in each platform project.
21 |
22 | ### For Android
23 | You call the "Init" method before all libraries initialization in MainActivity class.
24 |
25 | ```csharp
26 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
27 | {
28 | protected override void OnCreate(Bundle bundle)
29 | {
30 | BackgroundAggregator.Init(this);
31 |
32 | base.OnCreate(bundle);
33 | ....// Code for init was here
34 | }
35 | }
36 | ```
37 |
38 | ### For iOS
39 |
40 | You call the "Init" method before all libraries initialization in FinishedLaunching method in FormsApplicationDelegate class.
41 |
42 | ```csharp
43 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
44 | {
45 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
46 | {
47 | BackgroundAggregator.Init(this);
48 |
49 | ....// Code for init was here
50 | return base.FinishedLaunching(app, options);
51 | }
52 | }
53 | ```
54 |
55 | ### For macOS
56 |
57 | You call the "Init" method before all libraries initialization in DidFinishLaunching method in FormsApplicationDelegate class.
58 |
59 | ```csharp
60 | public partial class AppDelegate : global::Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate
61 | {
62 | public override void DidFinishLaunching(NSNotification notification)
63 | {
64 | BackgroundAggregator.Init(this);
65 | Forms.Init();
66 | LoadApplication(new App());
67 | base.DidFinishLaunching(notification);
68 | }
69 | }
70 | ```
71 |
72 | ### For Tizen
73 |
74 | You call the "Init" method before all libraries initialization in OnCreate method in FormsApplication class.
75 |
76 | ```csharp
77 | class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication
78 | {
79 | protected override void OnCreate()
80 | {
81 | base.OnCreate();
82 | BackgroundAggregator.Init(this);
83 | LoadApplication(new Sample.App());
84 | }
85 |
86 | static void Main(string[] args)
87 | {
88 | var app = new Program();
89 | global::Xamarin.Forms.Platform.Tizen.Forms.Init(app);
90 | app.Run(args);
91 | }
92 | }
93 | ```
94 |
95 | ### For Gtk
96 |
97 | You call the "Init" method before all libraries initialization in Main method in MainClass class.
98 |
99 | ```csharp
100 | class MainClass
101 | {
102 | [STAThread]
103 | public static void Main(string[] args)
104 | {
105 | Gtk.Application.Init();
106 | Forms.Init();
107 |
108 | BackgroundAggregator.Init();
109 |
110 | var app = new App();
111 | var window = new FormsWindow();
112 | window.LoadApplication(app);
113 | window.SetApplicationTitle("Game of Life");
114 | window.Show();
115 |
116 | Gtk.Application.Run();
117 | }
118 | }
119 | ```
120 |
121 | ### For UWP
122 |
123 | First, You call the "Init" method before all libraries initialization in MainPage class.
124 |
125 | ```csharp
126 | public sealed partial class MainPage
127 | {
128 | public MainPage()
129 | {
130 | this.InitializeComponent();
131 |
132 | BackgroundAggregator.Init(this);
133 |
134 | LoadApplication(new SampleBackground.App(new UwpInitializer()));
135 | }
136 | }
137 | ```
138 |
139 | Then you put the line "BackgroundAggregatorService.Instance.Start()" in OnBackgroundActivated method under App.cs of UWP project.
140 |
141 | ```csharp
142 | protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
143 | {
144 | base.OnBackgroundActivated(args);
145 | BackgroundAggregatorService.Instance.Start();
146 | }
147 | ```
148 |
149 | ## Create Background Task
150 |
151 | You will have to inherit IBackgroundTask interface in which you will supply and implement the interval and StartJob.
152 |
153 | ```csharp
154 | public class SomeBackgroundWork : IBackgroundTask
155 | {
156 | public SomeBackgroundWork()
157 | {
158 | }
159 |
160 | public Task StartJob()
161 | {
162 | // YOUR CODE HERE
163 |
164 | return;
165 | }
166 | }
167 | ```
168 |
169 | ## Register Background Task
170 |
171 | After you have implemented the Background Task you will need to register it to Background Aggregator Service. We define it on OnStart() method under App.cs.
172 |
173 | ```csharp
174 | protected override void OnStart()
175 | {
176 | //Register Background Tasks
177 | BackgroundAggregatorService.Add(() => new SomeBackgroundWork());
178 | BackgroundAggregatorService.Add(() => new OtherBackgroundWork());
179 |
180 | //Start the background service
181 | BackgroundAggregatorService.StartBackgroundService();
182 | }
183 | ```
184 |
185 |
186 | ## Quirks and Limitation
187 |
188 | Keep in mind that the plugin was not design to communicate with UI thread, one way of dealing the transfer of information is through storage (e.g. Sqlite or Settings plugin). Our sample project is using Monkey-Cache storage.
189 |
190 | Starting with Android Oreo it has already introduced the background execution limits similar to iOS background time limits assuming the app is in background mode or app is closed or minimized, as discuss on this [article](https://blog.xamarin.com/replacing-services-jobs-android-oreo-8-0/).
191 |
192 | UWP backgrounding uses In-Process backgrounding which is a bit less resilient than the Out-Process, however In-Process provides simplier approach and this is why we intend to support this platform using this approach.
193 |
194 | For recently supported Gtk Mac and Tizen are very straightforward it doesn't require native backgrounding, however it runs the task on a separate thread to immitate backgrounding process.
195 |
196 | For more info about Backgrounding in Android please check the link [HERE](https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/services/).
197 |
198 | For more info about Backgrounding in iOS please check the link [HERE](https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/).
199 |
200 | For more info about Backgrounding in UWP please check the link [HERE](https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-an-inproc-background-task).
201 |
202 | ## That's it
203 |
204 | You can now run your app that runs your Background Tasks in the Background Service. We have provided a few good samples to for you to dig in.
205 |
206 | ## Our Sample
207 |
208 | We have created a sample app that has 3 tasks in the background that get an RSS feed from news outlet like BBC News, CNN News and Washington Post.
209 |
210 |
211 |
212 |
213 | ## Platform Supported
214 |
215 | |Platform|Version|
216 | | ------------------- | :-----------: |
217 | |Xamarin.iOS|iOS 7+|
218 | |Xamarin.Mac|All|
219 | |Xamarin.Android|API 15+|
220 | |Windows 10 UWP|10+|
221 | |Tizen|4.0+|
222 | |Gtk|All|
223 | |.NET Standard|2.0+|
224 |
--------------------------------------------------------------------------------
/Xamarin.Forms.Background.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Xamarin.Forms.Background
5 | 0.0.1
6 | A plugin library to simplify Backgrounding in Xamarin.Forms.
7 | Winston Gubantes
8 | knocte
9 | https://github.com/nblockchain/XamarinFormsBackground/blob/master/LICENSE.md
10 | https://github.com/nblockchain/XamarinFormsBackground/
11 | https://github.com/winstongubantes/MatchaBackgroundService/blob/master/images/icon.png
12 | false
13 |
14 | BackgroundWorker abstraction that maps to native APIs for all platforms supported by Xamarin.Forms
15 |
16 |
17 | https://github.com/nblockchain/XamarinFormsBackground/commits/master
18 |
19 | A plugin library to simplify Backgrounding in Xamarin.Forms.
20 | xamarin, android, ios, backgroundservice
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/build.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | SET SLN=src\Xamarin.Forms.Background.sln
4 | CALL scripts\msbuild.bat /t:restore %SLN% && CALL scripts\msbuild.bat /t:build /p:Configuration=Release %SLN%
5 |
--------------------------------------------------------------------------------
/images/newsfeed.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/images/newsfeed.gif
--------------------------------------------------------------------------------
/scripts/msbuild.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | SET ENTERPRISE="%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe"
4 | SET COMMUNITY="%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
5 | SET BUILDTOOLS="%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe"
6 |
7 | IF EXIST %ENTERPRISE% (
8 | SET RUNNER=%ENTERPRISE%
9 | ) ELSE (
10 | IF EXIST %COMMUNITY% (
11 | SET RUNNER=%COMMUNITY%
12 | ) ELSE (
13 | IF EXIST %BUILDTOOLS% (
14 | SET RUNNER=%BUILDTOOLS%
15 | ) ELSE (
16 | ECHO msbuild.exe not found, is VS2019 installed?
17 | EXIT /b 1
18 | )
19 | )
20 | )
21 |
22 | %RUNNER% %*
23 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using Android.App;
2 | using Android.Content.PM;
3 | using Android.OS;
4 | using Xamarin.Forms.Background;
5 | using Xamarin.Forms.Background.Android;
6 | using Prism;
7 | using Prism.Ioc;
8 |
9 | namespace SampleBackground.Droid
10 | {
11 | [Activity(Label = "SampleBackground", Icon = "@mipmap/ic_launcher", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
12 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
13 | {
14 | protected override void OnCreate(Bundle bundle)
15 | {
16 | TabLayoutResource = Resource.Layout.Tabbar;
17 | ToolbarResource = Resource.Layout.Toolbar;
18 |
19 | base.OnCreate(bundle);
20 |
21 | BackgroundAggregator.Init(this);
22 |
23 | global::Xamarin.Forms.Forms.Init(this, bundle);
24 | LoadApplication(new App(new AndroidInitializer()));
25 | }
26 | }
27 |
28 | public class AndroidInitializer : IPlatformInitializer
29 | {
30 | public void RegisterTypes(IContainerRegistry container)
31 | {
32 | // Register any platform specific implementations
33 | }
34 | }
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/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("SampleBackground.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("SampleBackground.Android")]
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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/layout/Main.axml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/layout/Tabbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/layout/Toolbar.axml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.Android/Resources/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/values/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World, Click Me!
4 | SampleBackground.Droid
5 |
6 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
26 |
27 |
30 |
31 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.Android/SampleBackground.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 8.0.30703
7 | 2.0
8 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}
9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | Library
11 | Properties
12 | SampleBackground.Droid
13 | SampleBackground.Android
14 | 512
15 | v8.1
16 | True
17 | Resources\Resource.designer.cs
18 | Off
19 | Resource
20 | Properties\AndroidManifest.xml
21 | Resources
22 | Assets
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | true
32 | full
33 | false
34 | bin\Debug
35 | DEBUG;
36 | prompt
37 | 4
38 | None
39 |
40 |
41 | true
42 | pdbonly
43 | true
44 | bin\Release
45 | prompt
46 | 4
47 | true
48 | false
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | 0.9.10
60 |
61 |
62 | 0.1.0.10-beta
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | Designer
96 |
97 |
98 |
99 |
100 | {753cc20f-1b34-4328-9ee3-613575f528c5}
101 | SampleBackground
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/App.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.ApplicationModel;
7 | using Windows.ApplicationModel.Activation;
8 | using Windows.ApplicationModel.Background;
9 | using Windows.Foundation;
10 | using Windows.Foundation.Collections;
11 | using Windows.UI.Xaml;
12 | using Windows.UI.Xaml.Controls;
13 | using Windows.UI.Xaml.Controls.Primitives;
14 | using Windows.UI.Xaml.Data;
15 | using Windows.UI.Xaml.Input;
16 | using Windows.UI.Xaml.Media;
17 | using Windows.UI.Xaml.Navigation;
18 | using Xamarin.Forms.Background;
19 |
20 | namespace SampleBackground.UWP
21 | {
22 | ///
23 | /// Provides application-specific behavior to supplement the default Application class.
24 | ///
25 | sealed partial class App : Application
26 | {
27 | ///
28 | /// Initializes the singleton application object. This is the first line of authored code
29 | /// executed, and as such is the logical equivalent of main() or WinMain().
30 | ///
31 | public App()
32 | {
33 | this.InitializeComponent();
34 | this.Suspending += OnSuspending;
35 | }
36 |
37 | ///
38 | /// Invoked when the application is launched normally by the end user. Other entry points
39 | /// will be used such as when the application is launched to open a specific file.
40 | ///
41 | /// Details about the launch request and process.
42 | protected override void OnLaunched(LaunchActivatedEventArgs e)
43 | {
44 | Frame rootFrame = Window.Current.Content as Frame;
45 |
46 | // Do not repeat app initialization when the Window already has content,
47 | // just ensure that the window is active
48 | if (rootFrame == null)
49 | {
50 | // Create a Frame to act as the navigation context and navigate to the first page
51 | rootFrame = new Frame();
52 |
53 | rootFrame.NavigationFailed += OnNavigationFailed;
54 |
55 | Xamarin.Forms.Forms.Init(e);
56 |
57 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
58 | {
59 | //TODO: Load state from previously suspended application
60 | }
61 |
62 | // Place the frame in the current Window
63 | Window.Current.Content = rootFrame;
64 | }
65 |
66 | if (rootFrame.Content == null)
67 | {
68 | // When the navigation stack isn't restored navigate to the first page,
69 | // configuring the new page by passing required information as a navigation
70 | // parameter
71 | rootFrame.Navigate(typeof(MainPage), e.Arguments);
72 | }
73 | // Ensure the current window is active
74 | Window.Current.Activate();
75 | }
76 |
77 | ///
78 | /// Invoked when Navigation to a certain page fails
79 | ///
80 | /// The Frame which failed navigation
81 | /// Details about the navigation failure
82 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
83 | {
84 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
85 | }
86 |
87 | ///
88 | /// Invoked when application execution is being suspended. Application state is saved
89 | /// without knowing whether the application will be terminated or resumed with the contents
90 | /// of memory still intact.
91 | ///
92 | /// The source of the suspend request.
93 | /// Details about the suspend request.
94 | private void OnSuspending(object sender, SuspendingEventArgs e)
95 | {
96 | var deferral = e.SuspendingOperation.GetDeferral();
97 | //TODO: Save application state and stop any background activity
98 | deferral.Complete();
99 | }
100 |
101 | protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
102 | {
103 | base.OnBackgroundActivated(args);
104 | BackgroundAggregatorService.Instance.Start();
105 | }
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Prism;
2 | using Prism.Ioc;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Runtime.InteropServices.WindowsRuntime;
8 | using Windows.Foundation;
9 | using Windows.Foundation.Collections;
10 | using Windows.UI.Xaml;
11 | using Windows.UI.Xaml.Controls;
12 | using Windows.UI.Xaml.Controls.Primitives;
13 | using Windows.UI.Xaml.Data;
14 | using Windows.UI.Xaml.Input;
15 | using Windows.UI.Xaml.Media;
16 | using Windows.UI.Xaml.Navigation;
17 | using Xamarin.Forms.Background;
18 | using Xamarin.Forms.Background.UWP;
19 |
20 | namespace SampleBackground.UWP
21 | {
22 | public sealed partial class MainPage
23 | {
24 | public MainPage()
25 | {
26 | this.InitializeComponent();
27 |
28 | BackgroundAggregator.Init(this);
29 |
30 | LoadApplication(new SampleBackground.App(new UwpInitializer()));
31 | }
32 | }
33 |
34 | public class UwpInitializer : IPlatformInitializer
35 | {
36 | public void RegisterTypes(IContainerRegistry containerRegistry)
37 | {
38 | // Register any platform specific implementations
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SampleBackground
7 | BLagunas
8 | Assets\StoreLogo.png
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.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("SampleBackground.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SampleBackground.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)]
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.UWP/SampleBackground.UWP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}
8 | AppContainerExe
9 | Properties
10 | SampleBackground.UWP
11 | SampleBackground.UWP
12 | en-US
13 | UAP
14 | 10.0.16299.0
15 | 10.0.16299.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 | true
20 | true
21 | SampleBackground.UWP_TemporaryKey.pfx
22 |
23 |
24 | true
25 | bin\ARM\Debug\
26 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
27 | ;2008
28 | full
29 | ARM
30 | false
31 | prompt
32 | true
33 |
34 |
35 | bin\ARM\Release\
36 | TRACE;NETFX_CORE;WINDOWS_UWP
37 | true
38 | ;2008
39 | pdbonly
40 | ARM
41 | false
42 | prompt
43 | true
44 | true
45 |
46 |
47 | true
48 | bin\x64\Debug\
49 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
50 | ;2008
51 | full
52 | x64
53 | false
54 | prompt
55 | true
56 |
57 |
58 | bin\x64\Release\
59 | TRACE;NETFX_CORE;WINDOWS_UWP
60 | true
61 | ;2008
62 | pdbonly
63 | x64
64 | false
65 | prompt
66 | true
67 | true
68 |
69 |
70 | true
71 | bin\x86\Debug\
72 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
73 | ;2008
74 | full
75 | x86
76 | false
77 | prompt
78 | true
79 | true
80 |
81 |
82 | bin\x86\Release\
83 | TRACE;NETFX_CORE;WINDOWS_UWP
84 | true
85 | ;2008
86 | pdbonly
87 | x86
88 | false
89 | prompt
90 | true
91 | true
92 |
93 |
94 |
95 | App.xaml
96 |
97 |
98 | MainPage.xaml
99 |
100 |
101 |
102 |
103 |
104 | Designer
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | MSBuild:Compile
120 | Designer
121 |
122 |
123 | MSBuild:Compile
124 | Designer
125 |
126 |
127 |
128 |
129 | 0.9.10
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 | {753cc20f-1b34-4328-9ee3-613575f528c5}
141 | SampleBackground
142 |
143 |
144 |
145 | 14.0
146 |
147 |
148 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using Foundation;
2 | using Xamarin.Forms.Background;
3 | using Xamarin.Forms.Background.iOS;
4 | using Prism;
5 | using Prism.Ioc;
6 | using UIKit;
7 |
8 |
9 | namespace SampleBackground.iOS
10 | {
11 | // The UIApplicationDelegate for the application. This class is responsible for launching the
12 | // User Interface of the application, as well as listening (and optionally responding) to
13 | // application events from iOS.
14 | [Register("AppDelegate")]
15 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
16 | {
17 | //
18 | // This method is invoked when the application has loaded and is ready to run. In this
19 | // method you should instantiate the window, load the UI into it and then make the window
20 | // visible.
21 | //
22 | // You have 17 seconds to return from this method, or iOS will terminate your application.
23 | //
24 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
25 | {
26 | BackgroundAggregator.Init(this);
27 |
28 | global::Xamarin.Forms.Forms.Init();
29 | LoadApplication(new App(new iOSInitializer()));
30 |
31 | return base.FinishedLaunching(app, options);
32 | }
33 | }
34 |
35 | public class iOSInitializer : IPlatformInitializer
36 | {
37 | public void RegisterTypes(IContainerRegistry container)
38 | {
39 |
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images":[
3 | {
4 | "idiom":"iphone",
5 | "size":"20x20",
6 | "scale":"2x",
7 | "filename":"Icon-App-20x20@2x.png"
8 | },
9 | {
10 | "idiom":"iphone",
11 | "size":"20x20",
12 | "scale":"3x",
13 | "filename":"Icon-App-20x20@3x.png"
14 | },
15 | {
16 | "idiom":"iphone",
17 | "size":"29x29",
18 | "scale":"1x",
19 | "filename":"Icon-App-29x29@1x.png"
20 | },
21 | {
22 | "idiom":"iphone",
23 | "size":"29x29",
24 | "scale":"2x",
25 | "filename":"Icon-App-29x29@2x.png"
26 | },
27 | {
28 | "idiom":"iphone",
29 | "size":"29x29",
30 | "scale":"3x",
31 | "filename":"Icon-App-29x29@3x.png"
32 | },
33 | {
34 | "idiom":"iphone",
35 | "size":"40x40",
36 | "scale":"1x",
37 | "filename":"Icon-App-40x40@1x.png"
38 | },
39 | {
40 | "idiom":"iphone",
41 | "size":"40x40",
42 | "scale":"2x",
43 | "filename":"Icon-App-40x40@2x.png"
44 | },
45 | {
46 | "idiom":"iphone",
47 | "size":"40x40",
48 | "scale":"3x",
49 | "filename":"Icon-App-40x40@3x.png"
50 | },
51 | {
52 | "idiom":"iphone",
53 | "size":"57x57",
54 | "scale":"1x",
55 | "filename":"Icon-App-57x57@1x.png"
56 | },
57 | {
58 | "idiom":"iphone",
59 | "size":"57x57",
60 | "scale":"2x",
61 | "filename":"Icon-App-57x57@2x.png"
62 | },
63 | {
64 | "idiom":"iphone",
65 | "size":"60x60",
66 | "scale":"1x",
67 | "filename":"Icon-App-60x60@1x.png"
68 | },
69 | {
70 | "idiom":"iphone",
71 | "size":"60x60",
72 | "scale":"2x",
73 | "filename":"Icon-App-60x60@2x.png"
74 | },
75 | {
76 | "idiom":"iphone",
77 | "size":"60x60",
78 | "scale":"3x",
79 | "filename":"Icon-App-60x60@3x.png"
80 | },
81 | {
82 | "idiom":"iphone",
83 | "size":"76x76",
84 | "scale":"1x",
85 | "filename":"Icon-App-76x76@1x.png"
86 | },
87 | {
88 | "idiom":"ipad",
89 | "size":"20x20",
90 | "scale":"1x",
91 | "filename":"Icon-App-20x20@1x.png"
92 | },
93 | {
94 | "idiom":"ipad",
95 | "size":"20x20",
96 | "scale":"2x",
97 | "filename":"Icon-App-20x20@2x.png"
98 | },
99 | {
100 | "idiom":"ipad",
101 | "size":"29x29",
102 | "scale":"1x",
103 | "filename":"Icon-App-29x29@1x.png"
104 | },
105 | {
106 | "idiom":"ipad",
107 | "size":"29x29",
108 | "scale":"2x",
109 | "filename":"Icon-App-29x29@2x.png"
110 | },
111 | {
112 | "idiom":"ipad",
113 | "size":"40x40",
114 | "scale":"1x",
115 | "filename":"Icon-App-40x40@1x.png"
116 | },
117 | {
118 | "idiom":"ipad",
119 | "size":"40x40",
120 | "scale":"2x",
121 | "filename":"Icon-App-40x40@2x.png"
122 | },
123 | {
124 | "size" : "50x50",
125 | "idiom" : "ipad",
126 | "filename" : "Icon-Small-50x50@1x.png",
127 | "scale" : "1x"
128 | },
129 | {
130 | "size" : "50x50",
131 | "idiom" : "ipad",
132 | "filename" : "Icon-Small-50x50@2x.png",
133 | "scale" : "2x"
134 | },
135 | {
136 | "idiom":"ipad",
137 | "size":"72x72",
138 | "scale":"1x",
139 | "filename":"Icon-App-72x72@1x.png"
140 | },
141 | {
142 | "idiom":"ipad",
143 | "size":"72x72",
144 | "scale":"2x",
145 | "filename":"Icon-App-72x72@2x.png"
146 | },
147 | {
148 | "idiom":"ipad",
149 | "size":"76x76",
150 | "scale":"1x",
151 | "filename":"Icon-App-76x76@1x.png"
152 | },
153 | {
154 | "idiom":"ipad",
155 | "size":"76x76",
156 | "scale":"2x",
157 | "filename":"Icon-App-76x76@2x.png"
158 | },
159 | {
160 | "idiom":"ipad",
161 | "size":"76x76",
162 | "scale":"3x",
163 | "filename":"Icon-App-76x76@3x.png"
164 | },
165 | {
166 | "idiom":"ipad",
167 | "size":"83.5x83.5",
168 | "scale":"2x",
169 | "filename":"Icon-App-83.5x83.5@2x.png"
170 | },
171 | {
172 | "size" : "1024x1024",
173 | "idiom" : "ios-marketing",
174 | "filename" : "ItunesArtwork@2x.png",
175 | "scale" : "1x"
176 | }
177 | ],
178 | "info":{
179 | "version":1,
180 | "author":"makeappicon"
181 | }
182 | }
183 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.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 | 8.0
25 | CFBundleDisplayName
26 | SampleBackground
27 | CFBundleIdentifier
28 | com.companyname.appname
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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.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 SampleBackground.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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.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("SampleBackground.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SampleBackground.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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.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 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/SampleBackground.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | 8.0.30703
7 | 2.0
8 | {890704FB-9127-440A-B4F0-686131ED3844}
9 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | Exe
11 | SampleBackground.iOS
12 | Resources
13 | SampleBackground.iOS
14 |
15 |
16 |
17 |
18 | true
19 | full
20 | false
21 | bin\iPhoneSimulator\Debug
22 | DEBUG
23 | prompt
24 | 4
25 | false
26 | i386, x86_64
27 | None
28 | true
29 |
30 |
31 | none
32 | true
33 | bin\iPhoneSimulator\Release
34 | prompt
35 | 4
36 | None
37 | i386, x86_64
38 | false
39 |
40 |
41 | true
42 | full
43 | false
44 | bin\iPhone\Debug
45 | DEBUG
46 | prompt
47 | 4
48 | false
49 | ARM64
50 | iPhone Developer
51 | true
52 | Entitlements.plist
53 |
54 |
55 | none
56 | true
57 | bin\iPhone\Release
58 | prompt
59 | 4
60 | ARM64
61 | false
62 | iPhone Developer
63 | Entitlements.plist
64 |
65 |
66 | none
67 | True
68 | bin\iPhone\Ad-Hoc
69 | prompt
70 | 4
71 | False
72 | ARM64
73 | True
74 | Automatic:AdHoc
75 | iPhone Distribution
76 | Entitlements.plist
77 |
78 |
79 | none
80 | True
81 | bin\iPhone\AppStore
82 | prompt
83 | 4
84 | False
85 | ARM64
86 | Automatic:AppStore
87 | iPhone Distribution
88 | Entitlements.plist
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | false
103 |
104 |
105 | false
106 |
107 |
108 | false
109 |
110 |
111 | false
112 |
113 |
114 | false
115 |
116 |
117 | false
118 |
119 |
120 | false
121 |
122 |
123 | false
124 |
125 |
126 | false
127 |
128 |
129 | false
130 |
131 |
132 | false
133 |
134 |
135 | false
136 |
137 |
138 | false
139 |
140 |
141 | false
142 |
143 |
144 | false
145 |
146 |
147 | false
148 |
149 |
150 | false
151 |
152 |
153 | false
154 |
155 |
156 | false
157 |
158 |
159 | false
160 |
161 |
162 | false
163 |
164 |
165 | false
166 |
167 |
168 | false
169 |
170 |
171 | false
172 |
173 |
174 | false
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 | 0.9.10
194 |
195 |
196 | 0.1.0.10-beta
197 |
198 |
199 |
200 |
201 |
202 |
203 | {753cc20f-1b34-4328-9ee3-613575f528c5}
204 | SampleBackground
205 |
206 |
207 |
208 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@1x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@2x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/SampleBackground/SampleBackground.iOS/iTunesArtwork@3x.png
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms.Background;
2 | using MonkeyCache.SQLite;
3 | using Prism;
4 | using Prism.Ioc;
5 | using SampleBackground.ViewModels;
6 | using SampleBackground.Views;
7 | using Xamarin.Forms;
8 | using Xamarin.Forms.Xaml;
9 | using Prism.DryIoc;
10 | using Prism.Navigation;
11 | using SampleBackground.Services;
12 |
13 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
14 | namespace SampleBackground
15 | {
16 | public partial class App : PrismApplication
17 | {
18 | public App() : this(null) { }
19 |
20 | public App(IPlatformInitializer initializer) : base(initializer) { }
21 |
22 | protected override async void OnInitialized()
23 | {
24 | InitializeComponent();
25 |
26 | //Starting Navigation
27 | await NavigationService.NavigateAsync($"{nameof(NavigationPage)}/{nameof(MainPage)}");
28 | }
29 |
30 | protected override void RegisterTypes(IContainerRegistry containerRegistry)
31 | {
32 | //Set application id for our storage
33 | Barrel.ApplicationId = "NewsfeedAppId";
34 | containerRegistry.RegisterInstance(Barrel.Current);
35 |
36 | containerRegistry.RegisterForNavigation();
37 | containerRegistry.RegisterForNavigation();
38 | containerRegistry.RegisterForNavigation();
39 | }
40 |
41 | //Called when the application starts.
42 | protected override void OnStart()
43 | {
44 | StartBackgroundService();
45 | }
46 |
47 | // Called each time the application goes to the background.
48 | protected override void OnSleep()
49 | {
50 | //BackgroundAggregatorService.StopBackgroundService();
51 | }
52 |
53 | protected override void OnResume()
54 | {
55 | if (Device.RuntimePlatform == Device.iOS) StartBackgroundService();
56 | }
57 |
58 | private static void StartBackgroundService()
59 | {
60 | //Rss gets updated every 3 minutes
61 | BackgroundAggregatorService.Add(() => new PeriodicBBCNewsRssFeed(3));
62 | //BackgroundAggregatorService.Add(() => new PeriodicCNNRssFeed(4));
63 | BackgroundAggregatorService.Add(() => new PeriodicWashingtonPostRssFeed(5));
64 |
65 | //you now running the periodic task in the background
66 | BackgroundAggregatorService.StartBackgroundService();
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Models/RssData.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace SampleBackground.Models
6 | {
7 | public class RssData
8 | {
9 | public string Title { get; set; }
10 | public DateTime PubDate { get; set; }
11 | public string Link { get; set; }
12 | public string Guid { get; set; }
13 | public string Author { get; set; }
14 | public string Thumbnail { get; set; }
15 | public string Description { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/SampleBackground.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | MSBuild:UpdateDesignTimeXaml
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/BaseRssFeed.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using Xamarin.Forms.Background;
8 | using Microsoft.Toolkit.Parsers.Rss;
9 | using MonkeyCache.SQLite;
10 | using SampleBackground.Models;
11 |
12 | namespace SampleBackground.Services
13 | {
14 | public abstract class BaseRssFeed : IBackgroundTask
15 | {
16 | private readonly IRssParserService _parserService;
17 | private readonly string _url;
18 |
19 | protected BaseRssFeed(int minutes, string url)
20 | {
21 | _url = url;
22 | _parserService = new RssParserService();
23 | Interval = TimeSpan.FromMinutes(minutes);
24 | }
25 |
26 | public TimeSpan Interval { get; set; }
27 |
28 | public async Task StartJob()
29 | {
30 | var existingList = Barrel.Current.Get>("NewsFeeds") ?? new List();
31 |
32 | try
33 | {
34 | var result = await _parserService.Parse(_url);
35 |
36 | foreach (var rssSchema in result)
37 | {
38 | var isExist = existingList.Any(e => e.Guid == rssSchema.InternalID);
39 |
40 | if (!isExist)
41 | {
42 | existingList.Add(new RssData
43 | {
44 | Title = rssSchema.Title,
45 | PubDate = rssSchema.PublishDate,
46 | Link = rssSchema.FeedUrl,
47 | Guid = rssSchema.InternalID,
48 | Author = rssSchema.Author,
49 | Thumbnail = string.IsNullOrWhiteSpace(rssSchema.ImageUrl)
50 | ? $"https://placeimg.com/80/80/nature"
51 | : rssSchema.ImageUrl,
52 | Description = rssSchema.Summary
53 | });
54 | }
55 | }
56 |
57 | existingList = existingList.OrderByDescending(e => e.PubDate).ToList();
58 | }
59 | catch (Exception ex)
60 | {
61 | Debug.WriteLine(ex.Message);
62 | }
63 |
64 | Barrel.Current.Add("NewsFeeds", existingList, TimeSpan.FromDays(30));
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/IRssParserService.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Threading.Tasks;
3 | using Microsoft.Toolkit.Parsers.Rss;
4 |
5 | namespace SampleBackground.Services
6 | {
7 | public interface IRssParserService
8 | {
9 | Task> Parse(string url);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/PeriodicBBCNewsRssFeed.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Threading.Tasks;
5 | using Xamarin.Forms.Background;
6 |
7 | namespace SampleBackground.Services
8 | {
9 | public class PeriodicBBCNewsRssFeed : BaseRssFeed
10 | {
11 | public PeriodicBBCNewsRssFeed(int minutes)
12 | : base(minutes, "http://feeds.bbci.co.uk/news/rss.xml")
13 | {
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/PeriodicCNNRssFeed.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Threading.Tasks;
5 | using Xamarin.Forms.Background;
6 |
7 | namespace SampleBackground.Services
8 | {
9 | public class PeriodicCNNRssFeed : BaseRssFeed
10 | {
11 | public PeriodicCNNRssFeed(int minutes)
12 | : base(minutes, "http://rss.cnn.com/rss/cnn_topstories.rss")
13 | {
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/PeriodicWashingtonPostRssFeed.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Threading.Tasks;
5 | using Xamarin.Forms.Background;
6 |
7 | namespace SampleBackground.Services
8 | {
9 | public class PeriodicWashingtonPostRssFeed : BaseRssFeed
10 | {
11 | public PeriodicWashingtonPostRssFeed(int minutes)
12 | : base(minutes, "http://feeds.washingtonpost.com/rss/world")
13 | {
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Services/RSSParserService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Net.Http;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using Microsoft.Toolkit.Parsers.Rss;
7 |
8 | namespace SampleBackground.Services
9 | {
10 | public class RssParserService : IRssParserService
11 | {
12 | public async Task> Parse(string url)
13 | {
14 | string feed = null;
15 |
16 | using (var client = new HttpClient())
17 | {
18 | try
19 | {
20 | feed = await client.GetStringAsync(url);
21 | }
22 | catch
23 | {
24 | // ignored
25 | }
26 | }
27 |
28 | if (feed == null) return new List();
29 |
30 | var parser = new RssParser();
31 | var rss = parser.Parse(feed);
32 | return rss;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/ViewModels/MainPageViewModel.cs:
--------------------------------------------------------------------------------
1 | using Prism.Commands;
2 | using Prism.Mvvm;
3 | using Prism.Navigation;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Collections.ObjectModel;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 | using System.Windows.Input;
11 | using MonkeyCache;
12 | using Prism.Services;
13 | using SampleBackground.Models;
14 | using SampleBackground.Views;
15 |
16 | namespace SampleBackground.ViewModels
17 | {
18 | public class MainPageViewModel : ViewModelBase
19 | {
20 | private readonly INavigationService _navigationService;
21 | private readonly IBarrel _barrel;
22 | private readonly IDeviceService _deviceService;
23 | private ObservableCollection _newsFeed;
24 | private string _topNewsTitle;
25 | private string _topNewsLink;
26 | private string _topNewsGuid;
27 | private string _topNewsAuthor;
28 | private string _topNewsThumbnail;
29 | private string _topNewsDescription;
30 |
31 | public MainPageViewModel(
32 | INavigationService navigationService,
33 | IBarrel barrel,
34 | IDeviceService deviceService)
35 | : base (navigationService)
36 | {
37 | _navigationService = navigationService;
38 | _barrel = barrel;
39 | _deviceService = deviceService;
40 | Title = "News Feed";
41 | }
42 |
43 | private ICommand _refreshNewsFeedCommand;
44 |
45 | public ICommand RefreshNewsFeedCommand =>
46 | _refreshNewsFeedCommand ?? (_refreshNewsFeedCommand = new DelegateCommand(
47 | () =>
48 | {
49 | IsBusy = true;
50 |
51 | Task.Factory.StartNew(async () =>
52 | {
53 | Refresh:
54 |
55 | if (!_barrel.Exists("NewsFeeds"))
56 | {
57 | await Task.Delay(1000);
58 | goto Refresh;
59 | }
60 |
61 | var newsFeed = _barrel.Get>("NewsFeeds");
62 |
63 | _deviceService.BeginInvokeOnMainThread(() =>
64 | {
65 | if (newsFeed != null)
66 | {
67 | NewsFeed = new ObservableCollection(newsFeed);
68 |
69 | if (newsFeed.Any())
70 | {
71 | TopNewsTitle = newsFeed[0].Title;
72 | TopNewsLink = newsFeed[0].Link;
73 | TopNewsThumbnail = newsFeed[0].Thumbnail;
74 | TopNewsAuthor = newsFeed[0].Author;
75 | TopNewsDescription = newsFeed[0].Description;
76 | }
77 | }
78 |
79 | IsBusy = false;
80 | });
81 | });
82 | }));
83 |
84 | public void NavigateLandingPage(RssData data)
85 | {
86 | _navigationService.NavigateAsync(nameof(NewLandingPage), new NavigationParameters
87 | {
88 | {"url", data.Link }
89 | });
90 | }
91 |
92 | public ObservableCollection NewsFeed
93 | {
94 | get => _newsFeed;
95 | set => SetProperty(ref _newsFeed, value);
96 | }
97 |
98 | public string TopNewsTitle
99 | {
100 | get => _topNewsTitle;
101 | set => SetProperty(ref _topNewsTitle, value);
102 | }
103 |
104 | public string TopNewsLink
105 | {
106 | get => _topNewsLink;
107 | set => SetProperty(ref _topNewsLink, value);
108 | }
109 |
110 | public string TopNewsGuid
111 | {
112 | get => _topNewsGuid;
113 | set => SetProperty(ref _topNewsGuid, value);
114 | }
115 |
116 | public string TopNewsAuthor
117 | {
118 | get => _topNewsAuthor;
119 | set => SetProperty(ref _topNewsAuthor, value);
120 | }
121 |
122 | public string TopNewsThumbnail
123 | {
124 | get => _topNewsThumbnail;
125 | set => SetProperty(ref _topNewsThumbnail, value);
126 | }
127 |
128 | public string TopNewsDescription
129 | {
130 | get => _topNewsDescription;
131 | set => SetProperty(ref _topNewsDescription, value);
132 | }
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/ViewModels/NewLandingPageViewModel.cs:
--------------------------------------------------------------------------------
1 | using Prism.Commands;
2 | using Prism.Mvvm;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using Prism.Navigation;
7 |
8 | namespace SampleBackground.ViewModels
9 | {
10 | public class NewLandingPageViewModel : BindableBase, INavigationAware
11 | {
12 | public NewLandingPageViewModel()
13 | {
14 |
15 | }
16 |
17 |
18 |
19 | private string _url;
20 |
21 | public string Url
22 | {
23 | get => _url;
24 | set => SetProperty(ref _url, value);
25 | }
26 |
27 | public void OnNavigatedFrom(NavigationParameters parameters)
28 | {
29 | }
30 |
31 | public void OnNavigatedTo(NavigationParameters parameters)
32 | {
33 | var url = parameters.GetValue("url");
34 | Url = url;
35 | }
36 |
37 | public void OnNavigatingTo(NavigationParameters parameters)
38 | {
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/ViewModels/ViewModelBase.cs:
--------------------------------------------------------------------------------
1 | using Prism.Commands;
2 | using Prism.Mvvm;
3 | using Prism.Navigation;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace SampleBackground.ViewModels
9 | {
10 | public class ViewModelBase : BindableBase, INavigationAware, IDestructible
11 | {
12 | protected INavigationService NavigationService { get; private set; }
13 |
14 | private string _title;
15 | public string Title
16 | {
17 | get => _title;
18 | set => SetProperty(ref _title, value);
19 | }
20 |
21 | private bool _isBusy;
22 | public bool IsBusy
23 | {
24 | get => _isBusy;
25 | set => SetProperty(ref _isBusy, value);
26 | }
27 |
28 | public ViewModelBase(INavigationService navigationService)
29 | {
30 | NavigationService = navigationService;
31 | }
32 |
33 | public virtual void OnNavigatedFrom(NavigationParameters parameters)
34 | {
35 |
36 | }
37 |
38 | public virtual void OnNavigatedTo(NavigationParameters parameters)
39 | {
40 |
41 | }
42 |
43 | public virtual void OnNavigatingTo(NavigationParameters parameters)
44 | {
45 |
46 | }
47 |
48 | public virtual void Destroy()
49 | {
50 |
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Views/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
15 |
16 |
17 |
21 |
22 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
42 |
43 |
47 |
48 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Views/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using Xamarin.Forms.Background;
7 | using SampleBackground.Models;
8 | using SampleBackground.Services;
9 | using SampleBackground.ViewModels;
10 | using Xamarin.Forms;
11 |
12 | namespace SampleBackground.Views
13 | {
14 | public partial class MainPage : ContentPage
15 | {
16 | public MainPage ()
17 | {
18 | InitializeComponent ();
19 | }
20 |
21 | private void ListView_OnItemTapped(object sender, ItemTappedEventArgs e)
22 | {
23 | if(e.Item == null) return;
24 | NewsFeedList.SelectedItem = null;
25 |
26 | var selectedItem = (RssData)e.Item;
27 | var viewModel = (MainPageViewModel) BindingContext;
28 | viewModel.NavigateLandingPage(selectedItem);
29 | }
30 |
31 | protected override void OnAppearing()
32 | {
33 | base.OnAppearing();
34 | var viewModel = (MainPageViewModel)BindingContext;
35 | viewModel.RefreshNewsFeedCommand.Execute(null);
36 | }
37 | }
38 | }
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Views/NewLandingPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
13 |
--------------------------------------------------------------------------------
/src/SampleBackground/SampleBackground/Views/NewLandingPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 |
3 | namespace SampleBackground.Views
4 | {
5 | public partial class NewLandingPage : ContentPage
6 | {
7 | public NewLandingPage()
8 | {
9 | InitializeComponent();
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Android/ActivityExtension.cs:
--------------------------------------------------------------------------------
1 | using Android.Content;
2 |
3 | namespace Xamarin.Forms.Background.Android
4 | {
5 | public class BackgroundAggregator
6 | {
7 | public static void Init(ContextWrapper context)
8 | {
9 | MessagingCenter.Subscribe(context, nameof(StartLongRunningTask), message =>
10 | {
11 | var intent = new Intent(context, typeof(BackgroundService));
12 | context.StartService(intent);
13 | });
14 |
15 | MessagingCenter.Subscribe(context, nameof(StopLongRunningTask), message =>
16 | {
17 | var intent = new Intent(context, typeof(BackgroundService));
18 | context.StopService(intent);
19 | });
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Android/BackgroundService.cs:
--------------------------------------------------------------------------------
1 | using Android.App;
2 | using Android.Content;
3 | using Android.OS;
4 |
5 | namespace Xamarin.Forms.Background.Android
6 | {
7 | [Service]
8 | public class BackgroundService : Service
9 | {
10 | private static bool _isRunning;
11 |
12 | public override IBinder OnBind(Intent intent)
13 | {
14 | return null;
15 | }
16 |
17 | public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
18 | {
19 | if (!_isRunning)
20 | {
21 | //RUNNING TASK
22 | BackgroundAggregatorService.Instance.Start();
23 |
24 | _isRunning = true;
25 | }
26 |
27 | return StartCommandResult.Sticky;
28 | }
29 |
30 | public override void OnDestroy()
31 | {
32 | // when would this happen?
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Android/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("Xamarin.Forms.Background.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("Xamarin.Forms.Background.Android")]
14 | [assembly: AssemblyCopyright("Copyright © 2018")]
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 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Android/Resources/Resource.Designer.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nblockchain/XamarinFormsBackground/9ac65563de95252eb4bd925e7ed9f84dc1a3bcb5/src/Xamarin.Forms.Background.Android/Resources/Resource.Designer.cs
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Android/Xamarin.Forms.Background.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 8.0.30703
7 | 2.0
8 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}
9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | {9ef11e43-1701-4396-8835-8392d57abb70}
11 | Library
12 | Properties
13 | Xamarin.Forms.Background.Android
14 | Xamarin.Forms.Background.Android
15 | 512
16 | Resources\Resource.Designer.cs
17 | Off
18 | v8.1
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 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | {4d52e5ea-c24e-4380-9650-b84d7908701d}
54 | Xamarin.Forms.Background
55 |
56 |
57 |
58 |
59 | 2.5.0.122203
60 |
61 |
62 |
63 |
70 |
71 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Gtk/AppDelegateExtension.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace Xamarin.Forms.Background.Gtk
3 | {
4 | ///
5 | /// BackgroundAggregator
6 | ///
7 | public class BackgroundAggregator
8 | {
9 | private static readonly BackgroundGtkObject ObjBackgroundGtkObject = new BackgroundGtkObject();
10 |
11 | public static void Init()
12 | {
13 | MessagingCenter.Subscribe(ObjBackgroundGtkObject, nameof(StartLongRunningTask),
14 | message => { BackgroundSharedService.Instance.Start(); });
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Gtk/BackgroundGtkObject.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace Xamarin.Forms.Background.Gtk
3 | {
4 | internal class BackgroundGtkObject
5 | {
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Gtk/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("Xamarin.Forms.Background.Gtk")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Xamarin.Forms.Background.Gtk")]
13 | [assembly: AssemblyCopyright("Copyright © 2019")]
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("c94dce52-01a2-4e8d-8f3c-445502c904e0")]
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 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Gtk/Xamarin.Forms.Background.Gtk.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}
8 | Library
9 | Properties
10 | Xamarin.Forms.Background.Gtk
11 | Xamarin.Forms.Background.Gtk
12 | v4.6.1
13 | 512
14 | true
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | pdbonly
27 | true
28 | bin\Release\
29 | TRACE
30 | prompt
31 | 4
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | 2.5.0.122203
51 |
52 |
53 |
54 |
55 | {4d52e5ea-c24e-4380-9650-b84d7908701d}
56 | Xamarin.Forms.Background
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Mac/AppDelegateExtension.cs:
--------------------------------------------------------------------------------
1 |
2 | using Xamarin.Forms.Platform.MacOS;
3 |
4 | namespace Xamarin.Forms.Background.Mac
5 | {
6 | ///
7 | /// BackgroundAggregator
8 | ///
9 | public class BackgroundAggregator
10 | {
11 | ///
12 | /// Initializes the Background For Mac
13 | ///
14 | ///
15 | public static void Init(FormsApplicationDelegate appDelegate)
16 | {
17 | MessagingCenter.Subscribe(appDelegate, nameof(StartLongRunningTask),
18 | message => { BackgroundSharedService.Instance.Start(); });
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Mac/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 |
4 | // Information about this assembly is defined by the following attributes.
5 | // Change them to the values specific to your project.
6 |
7 | [assembly: AssemblyTitle ("Xamarin.Forms.Background.Mac")]
8 | [assembly: AssemblyDescription ("")]
9 | [assembly: AssemblyConfiguration ("")]
10 | [assembly: AssemblyCompany ("")]
11 | [assembly: AssemblyProduct ("Xamarin.Forms.Background.Mac")]
12 | [assembly: AssemblyCopyright ("Copyright © 2014")]
13 | [assembly: AssemblyTrademark ("")]
14 | [assembly: AssemblyCulture ("")]
15 |
16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision,
18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision.
19 |
20 | [assembly: AssemblyVersion ("2.0.2")]
21 | [assembly: AssemblyFileVersion ("2.0.2")]
22 |
23 | // The following attributes are used to specify the signing key for the assembly,
24 | // if desired. See the Mono documentation for more information about signing.
25 |
26 | //[assembly: AssemblyDelaySign(false)]
27 | //[assembly: AssemblyKeyFile("")]
28 |
29 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Mac/Xamarin.Forms.Background.Mac.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
7 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}
8 | Library
9 | Xamarin.Forms.Background.Mac
10 | Resources
11 | Xamarin.Forms.Background.Mac
12 | Xamarin.Mac
13 | v2.0
14 |
15 |
16 | true
17 | full
18 | false
19 | bin\Debug
20 | DEBUG;
21 | prompt
22 | 4
23 | false
24 | false
25 | false
26 | false
27 | false
28 | false
29 | false
30 | false
31 | None
32 |
33 |
34 | true
35 | bin\Release
36 | prompt
37 | 4
38 | false
39 | false
40 | false
41 | false
42 | false
43 | false
44 | false
45 | false
46 |
47 |
48 | __UNIFIED__;__MAC__
49 | pdbonly
50 | true
51 | None
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | 2.5.0.122203
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | {4D52E5EA-C24E-4380-9650-B84D7908701D}
70 | Xamarin.Forms.Background
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Tizen/ApplicationExtension.cs:
--------------------------------------------------------------------------------
1 |
2 | using Xamarin.Forms.Platform.Tizen;
3 |
4 | namespace Xamarin.Forms.Background.Tizen
5 | {
6 | public class BackgroundAggregator
7 | {
8 | public static void Init(FormsApplication appDelegate)
9 | {
10 | MessagingCenter.Subscribe(appDelegate, nameof(StartLongRunningTask),
11 | message => { BackgroundSharedService.Instance.Start(); });
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.Tizen/Xamarin.Forms.Background.Tizen.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | tizen40
6 | false
7 | Xamarin.Forms.Background.Tizen
8 | Xamarin.Forms.Background.Tizen
9 |
10 |
11 |
12 | portable
13 |
14 |
15 | None
16 |
17 |
18 |
19 |
20 |
21 | Runtime
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.UWP/BackgrounService.cs:
--------------------------------------------------------------------------------
1 |
2 |
3 | using Windows.ApplicationModel.Background;
4 |
5 | namespace Xamarin.Forms.Background.UWP
6 | {
7 | public sealed class BackgrounService : IBackgroundTask
8 | {
9 | public void Run(IBackgroundTaskInstance taskInstance)
10 | {
11 | BackgroundAggregatorService.Instance.Start();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.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("Xamarin.Forms.Background.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Xamarin.Forms.Background.UWP")]
13 | [assembly: AssemblyCopyright("Copyright © 2019")]
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)]
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.UWP/Properties/BackgroundService.UWP.rd.xml:
--------------------------------------------------------------------------------
1 |
2 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.UWP/WindowsPageExtension.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading;
7 | using System.Threading.Tasks;
8 | using Windows.ApplicationModel.Background;
9 | using Xamarin.Forms;
10 | using Xamarin.Forms.Platform.UWP;
11 | using static Windows.ApplicationModel.Background.BackgroundAccessStatus;
12 |
13 | namespace Xamarin.Forms.Background.UWP
14 | {
15 | public class BackgroundAggregator
16 | {
17 | private static string BackServiceName = "BackgroundService";
18 |
19 | public static void Init(WindowsPage page)
20 | {
21 | MessagingCenter.Subscribe(page, nameof(StartLongRunningTask),
22 | async (message) =>
23 | {
24 | var access = await BackgroundExecutionManager.RequestAccessAsync();
25 |
26 | switch (access)
27 | {
28 | case Unspecified:
29 | return;
30 | case AllowedMayUseActiveRealTimeConnectivity:
31 | return;
32 | case AllowedWithAlwaysOnRealTimeConnectivity:
33 | return;
34 | case Denied:
35 | return;
36 | }
37 |
38 | var task = new BackgroundTaskBuilder
39 | {
40 | Name = BackServiceName,
41 | //TaskEntryPoint = "Xamarin.Forms.BackgroundService.UWP.BackgrounService"
42 | };
43 |
44 | var trigger = new ApplicationTrigger();
45 | task.SetTrigger(trigger);
46 |
47 | //var condition = new SystemCondition(SystemConditionType.InternetAvailable);
48 | task.Register();
49 |
50 | await trigger.RequestAsync();
51 | });
52 |
53 | MessagingCenter.Subscribe(page, nameof(StopLongRunningTask),
54 | message =>
55 | {
56 | var tasks = BackgroundTaskRegistration.AllTasks;
57 | foreach (var task in tasks)
58 | {
59 | // You can check here for the name
60 | string name = task.Value.Name;
61 | if (name == BackServiceName)
62 | {
63 | task.Value.Unregister(true);
64 | }
65 | }
66 | //BackgroundAggregatorService.Instance.Stop();
67 | });
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.UWP/Xamarin.Forms.Background.UWP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {CA69EA56-6332-4207-ADEB-2D4996448980}
8 | Library
9 | Properties
10 | Xamarin.Forms.Background.UWP
11 | Xamarin.Forms.Background.UWP
12 | en-US
13 | UAP
14 | 10.0.16299.0
15 | 10.0.16299.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 |
20 |
21 | AnyCPU
22 | true
23 | full
24 | false
25 | bin\Debug\
26 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
27 | prompt
28 | 4
29 |
30 |
31 | AnyCPU
32 | pdbonly
33 | true
34 | bin\Release\
35 | TRACE;NETFX_CORE;WINDOWS_UWP
36 | prompt
37 | 4
38 |
39 |
40 | x86
41 | true
42 | bin\x86\Debug\
43 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
44 | ;2008
45 | full
46 | x86
47 | false
48 | prompt
49 |
50 |
51 | x86
52 | bin\x86\Release\
53 | TRACE;NETFX_CORE;WINDOWS_UWP
54 | true
55 | ;2008
56 | pdbonly
57 | x86
58 | false
59 | prompt
60 |
61 |
62 | ARM
63 | true
64 | bin\ARM\Debug\
65 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
66 | ;2008
67 | full
68 | ARM
69 | false
70 | prompt
71 |
72 |
73 | ARM
74 | bin\ARM\Release\
75 | TRACE;NETFX_CORE;WINDOWS_UWP
76 | true
77 | ;2008
78 | pdbonly
79 | ARM
80 | false
81 | prompt
82 |
83 |
84 | x64
85 | true
86 | bin\x64\Debug\
87 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
88 | ;2008
89 | full
90 | x64
91 | false
92 | prompt
93 |
94 |
95 | x64
96 | bin\x64\Release\
97 | TRACE;NETFX_CORE;WINDOWS_UWP
98 | true
99 | ;2008
100 | pdbonly
101 | x64
102 | false
103 | prompt
104 |
105 |
106 | PackageReference
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | 6.0.6
116 |
117 |
118 | 2.5.0.122203
119 |
120 |
121 |
122 |
123 | {4d52e5ea-c24e-4380-9650-b84d7908701d}
124 | Xamarin.Forms.Background
125 |
126 |
127 |
128 | 14.0
129 |
130 |
131 |
138 |
139 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.iOS/AppDelegateExtension.cs:
--------------------------------------------------------------------------------
1 |
2 | using Xamarin.Forms.Platform.iOS;
3 |
4 | namespace Xamarin.Forms.Background.iOS
5 | {
6 | public class BackgroundAggregator
7 | {
8 | public static void Init(FormsApplicationDelegate appDelegate)
9 | {
10 | MessagingCenter.Subscribe(appDelegate, nameof(StartLongRunningTask),
11 | message => { BackgroundService.Instance.Start(); });
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.iOS/BackgroundService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using UIKit;
3 |
4 | namespace Xamarin.Forms.Background.iOS
5 | {
6 | public class BackgroundService
7 | {
8 | private static nint _taskId;
9 | private static BackgroundService _instance;
10 | private static bool _isRunning;
11 |
12 | static BackgroundService()
13 | {
14 | }
15 |
16 | private BackgroundService()
17 | {
18 | }
19 |
20 | ///
21 | /// Single Instance of BackgroundService
22 | ///
23 | public static BackgroundService Instance { get; } =
24 | _instance ?? (_instance = new BackgroundService());
25 |
26 | ///
27 | /// Start the execution of background service
28 | ///
29 | public void Start()
30 | {
31 | if(_isRunning) return;
32 |
33 | //We only have 3 minutes in the background service as per iOS 9
34 | _taskId = UIApplication.SharedApplication.BeginBackgroundTask(nameof(StartLongRunningTask), Stop);
35 | BackgroundAggregatorService.Instance.Start();
36 |
37 | _isRunning = true;
38 | }
39 |
40 | public void Stop()
41 | {
42 | }
43 | }
44 | }
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.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("Xamarin.Forms.Background.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Xamarin.Forms.Background.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 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.iOS/Xamarin.Forms.Background.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 8.0.30703
7 | 2.0
8 | {E71F3053-056C-4381-9638-048ED73BDFF6}
9 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | {a52b8a63-bc84-4b47-910d-692533484892}
11 | Library
12 | Xamarin.Forms.Background.iOS
13 | Resources
14 | Xamarin.Forms.Background.iOS
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug
21 | DEBUG;
22 | prompt
23 | 4
24 | false
25 |
26 |
27 | full
28 | true
29 | bin\Release
30 | prompt
31 | 4
32 | false
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 2.5.0.122203
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | {4D52E5EA-C24E-4380-9650-B84D7908701D}
53 | Xamarin.Forms.Background
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27703.2042
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.Forms.Background", "Xamarin.Forms.Background\Xamarin.Forms.Background.csproj", "{4D52E5EA-C24E-4380-9650-B84D7908701D}"
7 | EndProject
8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{F0C7AE0A-2F29-497B-9ACE-04D805323E31}"
9 | EndProject
10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "iOS", "iOS", "{463693D8-900F-4F6B-A09D-7181AD557E2C}"
11 | EndProject
12 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Android", "Android", "{9200935B-9FB9-420C-B46E-0C5D3DDDDDE5}"
13 | EndProject
14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Background.iOS", "Xamarin.Forms.Background.iOS\Xamarin.Forms.Background.iOS.csproj", "{E71F3053-056C-4381-9638-048ED73BDFF6}"
15 | EndProject
16 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Background.Android", "Xamarin.Forms.Background.Android\Xamarin.Forms.Background.Android.csproj", "{9D97344A-1852-45C1-AFAE-0D69D93F565B}"
17 | EndProject
18 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample", "Sample", "{5426278F-BD47-431C-93A2-7BEBC33A4C3F}"
19 | EndProject
20 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleBackground", "SampleBackground\SampleBackground\SampleBackground.csproj", "{753CC20F-1B34-4328-9EE3-613575F528C5}"
21 | EndProject
22 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleBackground.Android", "SampleBackground\SampleBackground.Android\SampleBackground.Android.csproj", "{95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}"
23 | EndProject
24 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleBackground.iOS", "SampleBackground\SampleBackground.iOS\SampleBackground.iOS.csproj", "{890704FB-9127-440A-B4F0-686131ED3844}"
25 | EndProject
26 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{CD3542DF-BD8C-4279-B6D1-C527C4D538C6}"
27 | EndProject
28 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UWP", "UWP", "{99CC168D-7DB7-4464-80DC-A6C408602495}"
29 | EndProject
30 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Background.UWP", "Xamarin.Forms.Background.UWP\Xamarin.Forms.Background.UWP.csproj", "{CA69EA56-6332-4207-ADEB-2D4996448980}"
31 | EndProject
32 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleBackground.UWP", "SampleBackground\SampleBackground.UWP\SampleBackground.UWP.csproj", "{81BF4EA4-94A8-479E-85FE-D2C518375C56}"
33 | EndProject
34 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mac", "Mac", "{420D2072-5CE6-48F8-B4D4-9BE29D30DAFA}"
35 | EndProject
36 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{E4AC3349-E20D-4A94-8E62-3A0D97B3C083}"
37 | EndProject
38 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Background.Mac", "Xamarin.Forms.Background.Mac\Xamarin.Forms.Background.Mac.csproj", "{9AE7DCA3-296B-4338-930B-8FFEF78433F2}"
39 | EndProject
40 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tizen", "Tizen", "{F1503D39-F120-4EE7-A45A-AAB068771D89}"
41 | EndProject
42 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.Forms.Background.Tizen", "Xamarin.Forms.Background.Tizen\Xamarin.Forms.Background.Tizen.csproj", "{7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}"
43 | EndProject
44 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Background.Gtk", "Xamarin.Forms.Background.Gtk\Xamarin.Forms.Background.Gtk.csproj", "{C94DCE52-01A2-4E8D-8F3C-445502C904E0}"
45 | EndProject
46 | Global
47 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
48 | Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
49 | Ad-Hoc|ARM = Ad-Hoc|ARM
50 | Ad-Hoc|iPhone = Ad-Hoc|iPhone
51 | Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator
52 | Ad-Hoc|x64 = Ad-Hoc|x64
53 | Ad-Hoc|x86 = Ad-Hoc|x86
54 | AppStore|Any CPU = AppStore|Any CPU
55 | AppStore|ARM = AppStore|ARM
56 | AppStore|iPhone = AppStore|iPhone
57 | AppStore|iPhoneSimulator = AppStore|iPhoneSimulator
58 | AppStore|x64 = AppStore|x64
59 | AppStore|x86 = AppStore|x86
60 | Debug|Any CPU = Debug|Any CPU
61 | Debug|ARM = Debug|ARM
62 | Debug|iPhone = Debug|iPhone
63 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
64 | Debug|x64 = Debug|x64
65 | Debug|x86 = Debug|x86
66 | Release|Any CPU = Release|Any CPU
67 | Release|ARM = Release|ARM
68 | Release|iPhone = Release|iPhone
69 | Release|iPhoneSimulator = Release|iPhoneSimulator
70 | Release|x64 = Release|x64
71 | Release|x86 = Release|x86
72 | EndGlobalSection
73 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
74 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
75 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
76 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
77 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
78 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
79 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
80 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
81 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
82 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
83 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|x64.Build.0 = Release|Any CPU
84 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
85 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Ad-Hoc|x86.Build.0 = Release|Any CPU
86 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
87 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|Any CPU.Build.0 = Release|Any CPU
88 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|ARM.ActiveCfg = Release|Any CPU
89 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|ARM.Build.0 = Release|Any CPU
90 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|iPhone.ActiveCfg = Release|Any CPU
91 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|iPhone.Build.0 = Release|Any CPU
92 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
93 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
94 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|x64.ActiveCfg = Release|Any CPU
95 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|x64.Build.0 = Release|Any CPU
96 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|x86.ActiveCfg = Release|Any CPU
97 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.AppStore|x86.Build.0 = Release|Any CPU
98 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
99 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|Any CPU.Build.0 = Debug|Any CPU
100 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|ARM.ActiveCfg = Debug|Any CPU
101 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|ARM.Build.0 = Debug|Any CPU
102 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
103 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|iPhone.Build.0 = Debug|Any CPU
104 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
105 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
106 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|x64.ActiveCfg = Debug|Any CPU
107 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|x64.Build.0 = Debug|Any CPU
108 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|x86.ActiveCfg = Debug|Any CPU
109 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Debug|x86.Build.0 = Debug|Any CPU
110 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|Any CPU.ActiveCfg = Release|Any CPU
111 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|Any CPU.Build.0 = Release|Any CPU
112 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|ARM.ActiveCfg = Release|Any CPU
113 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|ARM.Build.0 = Release|Any CPU
114 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|iPhone.ActiveCfg = Release|Any CPU
115 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|iPhone.Build.0 = Release|Any CPU
116 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
117 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
118 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|x64.ActiveCfg = Release|Any CPU
119 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|x64.Build.0 = Release|Any CPU
120 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|x86.ActiveCfg = Release|Any CPU
121 | {4D52E5EA-C24E-4380-9650-B84D7908701D}.Release|x86.Build.0 = Release|Any CPU
122 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
123 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
124 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
125 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
126 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
127 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
128 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
129 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
130 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
131 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|x64.Build.0 = Release|Any CPU
132 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
133 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Ad-Hoc|x86.Build.0 = Release|Any CPU
134 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
135 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|Any CPU.Build.0 = Release|Any CPU
136 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|ARM.ActiveCfg = Release|Any CPU
137 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|ARM.Build.0 = Release|Any CPU
138 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|iPhone.ActiveCfg = Release|Any CPU
139 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|iPhone.Build.0 = Release|Any CPU
140 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
141 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
142 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|x64.ActiveCfg = Release|Any CPU
143 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|x64.Build.0 = Release|Any CPU
144 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|x86.ActiveCfg = Release|Any CPU
145 | {E71F3053-056C-4381-9638-048ED73BDFF6}.AppStore|x86.Build.0 = Release|Any CPU
146 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
147 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
148 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|ARM.ActiveCfg = Debug|Any CPU
149 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|ARM.Build.0 = Debug|Any CPU
150 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
151 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|iPhone.Build.0 = Debug|Any CPU
152 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
153 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
154 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|x64.ActiveCfg = Debug|Any CPU
155 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|x64.Build.0 = Debug|Any CPU
156 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|x86.ActiveCfg = Debug|Any CPU
157 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Debug|x86.Build.0 = Debug|Any CPU
158 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
159 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|Any CPU.Build.0 = Release|Any CPU
160 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|ARM.ActiveCfg = Release|Any CPU
161 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|ARM.Build.0 = Release|Any CPU
162 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|iPhone.ActiveCfg = Release|Any CPU
163 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|iPhone.Build.0 = Release|Any CPU
164 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
165 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
166 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|x64.ActiveCfg = Release|Any CPU
167 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|x64.Build.0 = Release|Any CPU
168 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|x86.ActiveCfg = Release|Any CPU
169 | {E71F3053-056C-4381-9638-048ED73BDFF6}.Release|x86.Build.0 = Release|Any CPU
170 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
171 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
172 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
173 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
174 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
175 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
176 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
177 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
178 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
179 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|x64.Build.0 = Release|Any CPU
180 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
181 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Ad-Hoc|x86.Build.0 = Release|Any CPU
182 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
183 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|Any CPU.Build.0 = Release|Any CPU
184 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|ARM.ActiveCfg = Release|Any CPU
185 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|ARM.Build.0 = Release|Any CPU
186 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|iPhone.ActiveCfg = Release|Any CPU
187 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|iPhone.Build.0 = Release|Any CPU
188 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
189 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
190 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|x64.ActiveCfg = Release|Any CPU
191 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|x64.Build.0 = Release|Any CPU
192 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|x86.ActiveCfg = Release|Any CPU
193 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.AppStore|x86.Build.0 = Release|Any CPU
194 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
195 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|Any CPU.Build.0 = Debug|Any CPU
196 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|ARM.ActiveCfg = Debug|Any CPU
197 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|ARM.Build.0 = Debug|Any CPU
198 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
199 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|iPhone.Build.0 = Debug|Any CPU
200 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
201 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
202 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|x64.ActiveCfg = Debug|Any CPU
203 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|x64.Build.0 = Debug|Any CPU
204 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|x86.ActiveCfg = Debug|Any CPU
205 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Debug|x86.Build.0 = Debug|Any CPU
206 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|Any CPU.ActiveCfg = Release|Any CPU
207 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|Any CPU.Build.0 = Release|Any CPU
208 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|ARM.ActiveCfg = Release|Any CPU
209 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|ARM.Build.0 = Release|Any CPU
210 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|iPhone.ActiveCfg = Release|Any CPU
211 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|iPhone.Build.0 = Release|Any CPU
212 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
213 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
214 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|x64.ActiveCfg = Release|Any CPU
215 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|x64.Build.0 = Release|Any CPU
216 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|x86.ActiveCfg = Release|Any CPU
217 | {9D97344A-1852-45C1-AFAE-0D69D93F565B}.Release|x86.Build.0 = Release|Any CPU
218 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
219 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
220 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
221 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
222 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
223 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
224 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
225 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
226 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
227 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
228 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
229 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
230 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
231 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|Any CPU.Build.0 = Debug|Any CPU
232 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|ARM.ActiveCfg = Debug|Any CPU
233 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|ARM.Build.0 = Debug|Any CPU
234 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
235 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|iPhone.Build.0 = Debug|Any CPU
236 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
237 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
238 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|x64.ActiveCfg = Debug|Any CPU
239 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|x64.Build.0 = Debug|Any CPU
240 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|x86.ActiveCfg = Debug|Any CPU
241 | {753CC20F-1B34-4328-9EE3-613575F528C5}.AppStore|x86.Build.0 = Debug|Any CPU
242 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
243 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
244 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|ARM.ActiveCfg = Debug|Any CPU
245 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|ARM.Build.0 = Debug|Any CPU
246 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|iPhone.ActiveCfg = Debug|Any CPU
247 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|iPhone.Build.0 = Debug|Any CPU
248 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
249 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
250 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|x64.ActiveCfg = Debug|Any CPU
251 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|x64.Build.0 = Debug|Any CPU
252 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|x86.ActiveCfg = Debug|Any CPU
253 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Debug|x86.Build.0 = Debug|Any CPU
254 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
255 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|Any CPU.Build.0 = Release|Any CPU
256 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|ARM.ActiveCfg = Release|Any CPU
257 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|ARM.Build.0 = Release|Any CPU
258 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|iPhone.ActiveCfg = Release|Any CPU
259 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|iPhone.Build.0 = Release|Any CPU
260 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
261 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
262 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|x64.ActiveCfg = Release|Any CPU
263 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|x64.Build.0 = Release|Any CPU
264 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|x86.ActiveCfg = Release|Any CPU
265 | {753CC20F-1B34-4328-9EE3-613575F528C5}.Release|x86.Build.0 = Release|Any CPU
266 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
267 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
268 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU
269 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
270 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
271 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU
272 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
273 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
274 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhone.Deploy.0 = Release|Any CPU
275 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
276 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
277 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU
278 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
279 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x64.Build.0 = Release|Any CPU
280 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x64.Deploy.0 = Release|Any CPU
281 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
282 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x86.Build.0 = Release|Any CPU
283 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Ad-Hoc|x86.Deploy.0 = Release|Any CPU
284 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
285 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|Any CPU.Build.0 = Release|Any CPU
286 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|Any CPU.Deploy.0 = Release|Any CPU
287 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|ARM.ActiveCfg = Release|Any CPU
288 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|ARM.Build.0 = Release|Any CPU
289 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|ARM.Deploy.0 = Release|Any CPU
290 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhone.ActiveCfg = Release|Any CPU
291 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhone.Build.0 = Release|Any CPU
292 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhone.Deploy.0 = Release|Any CPU
293 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
294 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
295 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU
296 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x64.ActiveCfg = Release|Any CPU
297 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x64.Build.0 = Release|Any CPU
298 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x64.Deploy.0 = Release|Any CPU
299 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x86.ActiveCfg = Release|Any CPU
300 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x86.Build.0 = Release|Any CPU
301 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.AppStore|x86.Deploy.0 = Release|Any CPU
302 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
303 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
304 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
305 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|ARM.ActiveCfg = Debug|Any CPU
306 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|ARM.Build.0 = Debug|Any CPU
307 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|ARM.Deploy.0 = Debug|Any CPU
308 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhone.ActiveCfg = Debug|Any CPU
309 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhone.Build.0 = Debug|Any CPU
310 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhone.Deploy.0 = Debug|Any CPU
311 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
312 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
313 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
314 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x64.ActiveCfg = Debug|Any CPU
315 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x64.Build.0 = Debug|Any CPU
316 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x64.Deploy.0 = Debug|Any CPU
317 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x86.ActiveCfg = Debug|Any CPU
318 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x86.Build.0 = Debug|Any CPU
319 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Debug|x86.Deploy.0 = Debug|Any CPU
320 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
321 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|Any CPU.Build.0 = Release|Any CPU
322 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|Any CPU.Deploy.0 = Release|Any CPU
323 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|ARM.ActiveCfg = Release|Any CPU
324 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|ARM.Build.0 = Release|Any CPU
325 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|ARM.Deploy.0 = Release|Any CPU
326 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhone.ActiveCfg = Release|Any CPU
327 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhone.Build.0 = Release|Any CPU
328 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhone.Deploy.0 = Release|Any CPU
329 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
330 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
331 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
332 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x64.ActiveCfg = Release|Any CPU
333 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x64.Build.0 = Release|Any CPU
334 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x64.Deploy.0 = Release|Any CPU
335 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x86.ActiveCfg = Release|Any CPU
336 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x86.Build.0 = Release|Any CPU
337 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC}.Release|x86.Deploy.0 = Release|Any CPU
338 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
339 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone
340 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
341 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
342 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
343 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
344 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone
345 | {890704FB-9127-440A-B4F0-686131ED3844}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone
346 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone
347 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|ARM.ActiveCfg = AppStore|iPhone
348 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
349 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|iPhone.Build.0 = AppStore|iPhone
350 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
351 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
352 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|x64.ActiveCfg = AppStore|iPhone
353 | {890704FB-9127-440A-B4F0-686131ED3844}.AppStore|x86.ActiveCfg = AppStore|iPhone
354 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|Any CPU.ActiveCfg = Debug|iPhone
355 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|ARM.ActiveCfg = Debug|iPhone
356 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|iPhone.ActiveCfg = Debug|iPhone
357 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|iPhone.Build.0 = Debug|iPhone
358 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
359 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
360 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|x64.ActiveCfg = Debug|iPhone
361 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|x86.ActiveCfg = Debug|iPhone
362 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|Any CPU.ActiveCfg = Release|iPhone
363 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|ARM.ActiveCfg = Release|iPhone
364 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|iPhone.ActiveCfg = Release|iPhone
365 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|iPhone.Build.0 = Release|iPhone
366 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
367 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
368 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|x64.ActiveCfg = Release|iPhone
369 | {890704FB-9127-440A-B4F0-686131ED3844}.Release|x86.ActiveCfg = Release|iPhone
370 | {890704FB-9127-440A-B4F0-686131ED3844}.Debug|Any CPU.Build.0 = Debug|iPhone
371 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
372 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
373 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
374 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|ARM.Build.0 = Release|ARM
375 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
376 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
377 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
378 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
379 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|x64.ActiveCfg = Release|x64
380 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|x64.Build.0 = Release|x64
381 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|x86.ActiveCfg = Release|x86
382 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Ad-Hoc|x86.Build.0 = Release|x86
383 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
384 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|Any CPU.Build.0 = Release|Any CPU
385 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|ARM.ActiveCfg = Release|ARM
386 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|ARM.Build.0 = Release|ARM
387 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|iPhone.ActiveCfg = Release|Any CPU
388 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|iPhone.Build.0 = Release|Any CPU
389 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
390 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
391 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|x64.ActiveCfg = Release|x64
392 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|x64.Build.0 = Release|x64
393 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|x86.ActiveCfg = Release|x86
394 | {CA69EA56-6332-4207-ADEB-2D4996448980}.AppStore|x86.Build.0 = Release|x86
395 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
396 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|Any CPU.Build.0 = Debug|Any CPU
397 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|ARM.ActiveCfg = Debug|ARM
398 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|ARM.Build.0 = Debug|ARM
399 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|iPhone.ActiveCfg = Debug|Any CPU
400 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|iPhone.Build.0 = Debug|Any CPU
401 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
402 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
403 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|x64.ActiveCfg = Debug|x64
404 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|x64.Build.0 = Debug|x64
405 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|x86.ActiveCfg = Debug|x86
406 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Debug|x86.Build.0 = Debug|x86
407 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|Any CPU.ActiveCfg = Release|Any CPU
408 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|Any CPU.Build.0 = Release|Any CPU
409 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|ARM.ActiveCfg = Release|ARM
410 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|ARM.Build.0 = Release|ARM
411 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|iPhone.ActiveCfg = Release|Any CPU
412 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|iPhone.Build.0 = Release|Any CPU
413 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
414 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
415 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|x64.ActiveCfg = Release|x64
416 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|x64.Build.0 = Release|x64
417 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|x86.ActiveCfg = Release|x86
418 | {CA69EA56-6332-4207-ADEB-2D4996448980}.Release|x86.Build.0 = Release|x86
419 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|Any CPU.ActiveCfg = Release|x86
420 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|Any CPU.Build.0 = Release|x86
421 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|Any CPU.Deploy.0 = Release|x86
422 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
423 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|ARM.Build.0 = Release|ARM
424 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|ARM.Deploy.0 = Release|ARM
425 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhone.ActiveCfg = Release|x86
426 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhone.Build.0 = Release|x86
427 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhone.Deploy.0 = Release|x86
428 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x86
429 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x86
430 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x86
431 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x64.ActiveCfg = Release|x64
432 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x64.Build.0 = Release|x64
433 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x64.Deploy.0 = Release|x64
434 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x86.ActiveCfg = Release|x86
435 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x86.Build.0 = Release|x86
436 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Ad-Hoc|x86.Deploy.0 = Release|x86
437 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|Any CPU.ActiveCfg = Release|x86
438 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|Any CPU.Build.0 = Release|x86
439 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|Any CPU.Deploy.0 = Release|x86
440 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|ARM.ActiveCfg = Release|ARM
441 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|ARM.Build.0 = Release|ARM
442 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|ARM.Deploy.0 = Release|ARM
443 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhone.ActiveCfg = Release|x86
444 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhone.Build.0 = Release|x86
445 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhone.Deploy.0 = Release|x86
446 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhoneSimulator.ActiveCfg = Release|x86
447 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhoneSimulator.Build.0 = Release|x86
448 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|iPhoneSimulator.Deploy.0 = Release|x86
449 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x64.ActiveCfg = Release|x64
450 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x64.Build.0 = Release|x64
451 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x64.Deploy.0 = Release|x64
452 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x86.ActiveCfg = Release|x86
453 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x86.Build.0 = Release|x86
454 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.AppStore|x86.Deploy.0 = Release|x86
455 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|Any CPU.ActiveCfg = Debug|x86
456 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|ARM.ActiveCfg = Debug|ARM
457 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|ARM.Build.0 = Debug|ARM
458 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|ARM.Deploy.0 = Debug|ARM
459 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|iPhone.ActiveCfg = Debug|x86
460 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
461 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x64.ActiveCfg = Debug|x64
462 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x64.Build.0 = Debug|x64
463 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x64.Deploy.0 = Debug|x64
464 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x86.ActiveCfg = Debug|x86
465 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x86.Build.0 = Debug|x86
466 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Debug|x86.Deploy.0 = Debug|x86
467 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|Any CPU.ActiveCfg = Release|x86
468 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|ARM.ActiveCfg = Release|ARM
469 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|ARM.Build.0 = Release|ARM
470 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|ARM.Deploy.0 = Release|ARM
471 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|iPhone.ActiveCfg = Release|x86
472 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|iPhoneSimulator.ActiveCfg = Release|x86
473 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x64.ActiveCfg = Release|x64
474 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x64.Build.0 = Release|x64
475 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x64.Deploy.0 = Release|x64
476 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x86.ActiveCfg = Release|x86
477 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x86.Build.0 = Release|x86
478 | {81BF4EA4-94A8-479E-85FE-D2C518375C56}.Release|x86.Deploy.0 = Release|x86
479 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
480 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
481 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
482 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
483 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
484 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
485 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
486 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
487 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
488 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|x64.Build.0 = Release|Any CPU
489 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
490 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Ad-Hoc|x86.Build.0 = Release|Any CPU
491 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
492 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|Any CPU.Build.0 = Release|Any CPU
493 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|ARM.ActiveCfg = Release|Any CPU
494 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|ARM.Build.0 = Release|Any CPU
495 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|iPhone.ActiveCfg = Release|Any CPU
496 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|iPhone.Build.0 = Release|Any CPU
497 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
498 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
499 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|x64.ActiveCfg = Release|Any CPU
500 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|x64.Build.0 = Release|Any CPU
501 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|x86.ActiveCfg = Release|Any CPU
502 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.AppStore|x86.Build.0 = Release|Any CPU
503 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
504 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
505 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|ARM.ActiveCfg = Debug|Any CPU
506 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|ARM.Build.0 = Debug|Any CPU
507 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
508 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|iPhone.Build.0 = Debug|Any CPU
509 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
510 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
511 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|x64.ActiveCfg = Debug|Any CPU
512 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|x64.Build.0 = Debug|Any CPU
513 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|x86.ActiveCfg = Debug|Any CPU
514 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Debug|x86.Build.0 = Debug|Any CPU
515 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
516 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|Any CPU.Build.0 = Release|Any CPU
517 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|ARM.ActiveCfg = Release|Any CPU
518 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|ARM.Build.0 = Release|Any CPU
519 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|iPhone.ActiveCfg = Release|Any CPU
520 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|iPhone.Build.0 = Release|Any CPU
521 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
522 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
523 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|x64.ActiveCfg = Release|Any CPU
524 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|x64.Build.0 = Release|Any CPU
525 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|x86.ActiveCfg = Release|Any CPU
526 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2}.Release|x86.Build.0 = Release|Any CPU
527 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
528 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
529 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
530 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
531 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
532 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
533 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
534 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
535 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
536 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
537 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
538 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
539 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
540 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|Any CPU.Build.0 = Debug|Any CPU
541 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|ARM.ActiveCfg = Debug|Any CPU
542 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|ARM.Build.0 = Debug|Any CPU
543 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
544 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|iPhone.Build.0 = Debug|Any CPU
545 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
546 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
547 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|x64.ActiveCfg = Debug|Any CPU
548 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|x64.Build.0 = Debug|Any CPU
549 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|x86.ActiveCfg = Debug|Any CPU
550 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.AppStore|x86.Build.0 = Debug|Any CPU
551 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
552 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
553 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|ARM.ActiveCfg = Debug|Any CPU
554 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|ARM.Build.0 = Debug|Any CPU
555 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
556 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|iPhone.Build.0 = Debug|Any CPU
557 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
558 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
559 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|x64.ActiveCfg = Debug|Any CPU
560 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|x64.Build.0 = Debug|Any CPU
561 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|x86.ActiveCfg = Debug|Any CPU
562 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Debug|x86.Build.0 = Debug|Any CPU
563 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
564 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|Any CPU.Build.0 = Release|Any CPU
565 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|ARM.ActiveCfg = Release|Any CPU
566 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|ARM.Build.0 = Release|Any CPU
567 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|iPhone.ActiveCfg = Release|Any CPU
568 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|iPhone.Build.0 = Release|Any CPU
569 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
570 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
571 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|x64.ActiveCfg = Release|Any CPU
572 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|x64.Build.0 = Release|Any CPU
573 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|x86.ActiveCfg = Release|Any CPU
574 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9}.Release|x86.Build.0 = Release|Any CPU
575 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
576 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
577 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
578 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
579 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
580 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
581 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
582 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
583 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
584 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|x64.Build.0 = Release|Any CPU
585 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
586 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Ad-Hoc|x86.Build.0 = Release|Any CPU
587 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
588 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|Any CPU.Build.0 = Release|Any CPU
589 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|ARM.ActiveCfg = Release|Any CPU
590 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|ARM.Build.0 = Release|Any CPU
591 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|iPhone.ActiveCfg = Release|Any CPU
592 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|iPhone.Build.0 = Release|Any CPU
593 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
594 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
595 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|x64.ActiveCfg = Release|Any CPU
596 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|x64.Build.0 = Release|Any CPU
597 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|x86.ActiveCfg = Release|Any CPU
598 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.AppStore|x86.Build.0 = Release|Any CPU
599 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
600 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
601 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|ARM.ActiveCfg = Debug|Any CPU
602 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|ARM.Build.0 = Debug|Any CPU
603 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
604 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|iPhone.Build.0 = Debug|Any CPU
605 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
606 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
607 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|x64.ActiveCfg = Debug|Any CPU
608 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|x64.Build.0 = Debug|Any CPU
609 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|x86.ActiveCfg = Debug|Any CPU
610 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Debug|x86.Build.0 = Debug|Any CPU
611 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
612 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|Any CPU.Build.0 = Release|Any CPU
613 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|ARM.ActiveCfg = Release|Any CPU
614 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|ARM.Build.0 = Release|Any CPU
615 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|iPhone.ActiveCfg = Release|Any CPU
616 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|iPhone.Build.0 = Release|Any CPU
617 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
618 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
619 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|x64.ActiveCfg = Release|Any CPU
620 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|x64.Build.0 = Release|Any CPU
621 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|x86.ActiveCfg = Release|Any CPU
622 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0}.Release|x86.Build.0 = Release|Any CPU
623 | EndGlobalSection
624 | GlobalSection(SolutionProperties) = preSolution
625 | HideSolutionNode = FALSE
626 | EndGlobalSection
627 | GlobalSection(NestedProjects) = preSolution
628 | {4D52E5EA-C24E-4380-9650-B84D7908701D} = {F0C7AE0A-2F29-497B-9ACE-04D805323E31}
629 | {F0C7AE0A-2F29-497B-9ACE-04D805323E31} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
630 | {463693D8-900F-4F6B-A09D-7181AD557E2C} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
631 | {9200935B-9FB9-420C-B46E-0C5D3DDDDDE5} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
632 | {E71F3053-056C-4381-9638-048ED73BDFF6} = {463693D8-900F-4F6B-A09D-7181AD557E2C}
633 | {9D97344A-1852-45C1-AFAE-0D69D93F565B} = {9200935B-9FB9-420C-B46E-0C5D3DDDDDE5}
634 | {753CC20F-1B34-4328-9EE3-613575F528C5} = {5426278F-BD47-431C-93A2-7BEBC33A4C3F}
635 | {95014DAA-ADD6-42E6-8F7D-12F4E7C6AAFC} = {5426278F-BD47-431C-93A2-7BEBC33A4C3F}
636 | {890704FB-9127-440A-B4F0-686131ED3844} = {5426278F-BD47-431C-93A2-7BEBC33A4C3F}
637 | {99CC168D-7DB7-4464-80DC-A6C408602495} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
638 | {CA69EA56-6332-4207-ADEB-2D4996448980} = {99CC168D-7DB7-4464-80DC-A6C408602495}
639 | {81BF4EA4-94A8-479E-85FE-D2C518375C56} = {5426278F-BD47-431C-93A2-7BEBC33A4C3F}
640 | {420D2072-5CE6-48F8-B4D4-9BE29D30DAFA} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
641 | {E4AC3349-E20D-4A94-8E62-3A0D97B3C083} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
642 | {9AE7DCA3-296B-4338-930B-8FFEF78433F2} = {420D2072-5CE6-48F8-B4D4-9BE29D30DAFA}
643 | {F1503D39-F120-4EE7-A45A-AAB068771D89} = {CD3542DF-BD8C-4279-B6D1-C527C4D538C6}
644 | {7ACA4C88-44A4-457B-8DCE-CF4B977EB8C9} = {F1503D39-F120-4EE7-A45A-AAB068771D89}
645 | {C94DCE52-01A2-4E8D-8F3C-445502C904E0} = {E4AC3349-E20D-4A94-8E62-3A0D97B3C083}
646 | EndGlobalSection
647 | GlobalSection(ExtensibilityGlobals) = postSolution
648 | SolutionGuid = {51C3B055-B644-4ECF-9741-0A5114321320}
649 | EndGlobalSection
650 | EndGlobal
651 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/BackgroundAggregatorService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace Xamarin.Forms.Background
5 | {
6 | public partial class BackgroundAggregatorService
7 | {
8 | private static BackgroundAggregatorService _instance;
9 | private static Dictionary _schedules = new Dictionary();
10 |
11 | static BackgroundAggregatorService()
12 | {
13 | }
14 |
15 | private BackgroundAggregatorService()
16 | {
17 | }
18 |
19 | public static void Add(Func schedule) where T: IBackgroundTask
20 | {
21 | var typeName = schedule.GetType().GetGenericArguments()[0]?.Name;
22 |
23 | if (typeName != null && !_schedules.ContainsKey(typeName))
24 | _schedules.Add(typeName, schedule());
25 | }
26 |
27 | public static void StartBackgroundService()
28 | {
29 | var message = new StartLongRunningTask();
30 | MessagingCenter.Send(message, nameof(StartLongRunningTask));
31 | }
32 |
33 | public static BackgroundAggregatorService Instance { get; } = _instance ?? (_instance = new BackgroundAggregatorService());
34 |
35 | public void Start()
36 | {
37 | foreach (var schedule in _schedules)
38 | {
39 | schedule.Value.StartJob();
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/BackgroundSharedService.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace Xamarin.Forms.Background
3 | {
4 | public class BackgroundSharedService
5 | {
6 | private static BackgroundSharedService _instance;
7 |
8 | static BackgroundSharedService()
9 | {
10 | }
11 |
12 | private BackgroundSharedService()
13 | {
14 | }
15 |
16 | ///
17 | /// Single Instance of BackgroundSharedService
18 | ///
19 | public static BackgroundSharedService Instance { get; } =
20 | _instance ?? (_instance = new BackgroundSharedService());
21 |
22 |
23 | ///
24 | /// Start the execution of background service
25 | ///
26 | public void Start()
27 | {
28 | BackgroundAggregatorService.Instance.Start();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/IBackgroundTask.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 |
3 | namespace Xamarin.Forms.Background
4 | {
5 | public interface IBackgroundTask
6 | {
7 | Task StartJob();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/StartLongRunningTask.cs:
--------------------------------------------------------------------------------
1 | namespace Xamarin.Forms.Background
2 | {
3 | public class StartLongRunningTask
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/StopLongRunningTask.cs:
--------------------------------------------------------------------------------
1 | namespace Xamarin.Forms.Background
2 | {
3 | public class StopLongRunningTask
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/Xamarin.Forms.Background/Xamarin.Forms.Background.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | 1.0.5453
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------