├── .gitignore
├── BugSweeper.sln
├── BugSweeper
├── BugSweeper.Android
│ ├── Assets
│ │ └── AboutAssets.txt
│ ├── BugSweeper.Android.csproj
│ ├── MainActivity.cs
│ ├── Properties
│ │ ├── AndroidManifest.xml
│ │ └── AssemblyInfo.cs
│ └── Resources
│ │ ├── AboutResources.txt
│ │ ├── Drawable
│ │ └── Icon.png
│ │ ├── Resource.Designer (BuildSurfacePro's conflicted copy 2014-09-17).cs
│ │ ├── Resource.Designer.cs
│ │ ├── drawable-hdpi
│ │ └── Icon.png
│ │ ├── drawable-ldpi
│ │ └── Icon.png
│ │ ├── drawable-mdpi
│ │ └── Icon.png
│ │ ├── drawable-xhdpi
│ │ └── Icon.png
│ │ ├── drawable-xxhdpi
│ │ └── Icon.png
│ │ ├── layout
│ │ ├── Tabbar.axml
│ │ └── Toolbar.axml
│ │ └── values
│ │ ├── colors.xml
│ │ └── styles.xml
├── BugSweeper.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
│ ├── BugSweeper.UWP.csproj
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Package.appxmanifest
│ └── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
├── BugSweeper.iOS
│ ├── AppDelegate.cs
│ ├── BugSweeper.iOS.csproj
│ ├── Info.plist
│ ├── Main.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ └── Resources
│ │ ├── Default-568h@2x.png
│ │ ├── Default.png
│ │ ├── Default@2x.png
│ │ ├── Icon-60@2x.png
│ │ ├── Icon-Small-40.png
│ │ ├── Icon-Small-40@2x.png
│ │ ├── Icon-Small.png
│ │ ├── Icon-Small@2x.png
│ │ ├── Icon.png
│ │ └── Icon@2x.png
├── BugSweeper
│ ├── App.cs
│ ├── Board.cs
│ ├── BugSweeper.csproj
│ ├── BugSweeperPage.xaml
│ └── BugSweeperPage.xaml.cs
└── BugSweeperTile
│ ├── BugSweeperTile.csproj
│ ├── Images
│ ├── RedBug.png
│ └── Xamarin120.png
│ └── Tile.cs
├── Metadata.xml
├── README.md
└── Screenshots
├── 01Android.png
├── 01iOS.png
├── 01wp.png
├── UWP.png
└── Windows.png
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # MSTest test Results
33 | [Tt]est[Rr]esult*/
34 | [Bb]uild[Ll]og.*
35 |
36 | # NUNIT
37 | *.VisualState.xml
38 | TestResult.xml
39 |
40 | # Build Results of an ATL Project
41 | [Dd]ebugPS/
42 | [Rr]eleasePS/
43 | dlldata.c
44 |
45 | # .NET Core
46 | project.lock.json
47 | project.fragment.lock.json
48 | artifacts/
49 | **/Properties/launchSettings.json
50 |
51 | *_i.c
52 | *_p.c
53 | *_i.h
54 | *.ilk
55 | *.meta
56 | *.obj
57 | *.pch
58 | *.pdb
59 | *.pgc
60 | *.pgd
61 | *.rsp
62 | *.sbr
63 | *.tlb
64 | *.tli
65 | *.tlh
66 | *.tmp
67 | *.tmp_proj
68 | *.log
69 | *.vspscc
70 | *.vssscc
71 | .builds
72 | *.pidb
73 | *.svclog
74 | *.scc
75 |
76 | # Chutzpah Test files
77 | _Chutzpah*
78 |
79 | # Visual C++ cache files
80 | ipch/
81 | *.aps
82 | *.ncb
83 | *.opendb
84 | *.opensdf
85 | *.sdf
86 | *.cachefile
87 | *.VC.db
88 | *.VC.VC.opendb
89 |
90 | # Visual Studio profiler
91 | *.psess
92 | *.vsp
93 | *.vspx
94 | *.sap
95 |
96 | # TFS 2012 Local Workspace
97 | $tf/
98 |
99 | # Guidance Automation Toolkit
100 | *.gpState
101 |
102 | # ReSharper is a .NET coding add-in
103 | _ReSharper*/
104 | *.[Rr]e[Ss]harper
105 | *.DotSettings.user
106 |
107 | # JustCode is a .NET coding add-in
108 | .JustCode
109 |
110 | # TeamCity is a build add-in
111 | _TeamCity*
112 |
113 | # DotCover is a Code Coverage Tool
114 | *.dotCover
115 |
116 | # Visual Studio code coverage results
117 | *.coverage
118 | *.coveragexml
119 |
120 | # NCrunch
121 | _NCrunch_*
122 | .*crunch*.local.xml
123 | nCrunchTemp_*
124 |
125 | # MightyMoose
126 | *.mm.*
127 | AutoTest.Net/
128 |
129 | # Web workbench (sass)
130 | .sass-cache/
131 |
132 | # Installshield output folder
133 | [Ee]xpress/
134 |
135 | # DocProject is a documentation generator add-in
136 | DocProject/buildhelp/
137 | DocProject/Help/*.HxT
138 | DocProject/Help/*.HxC
139 | DocProject/Help/*.hhc
140 | DocProject/Help/*.hhk
141 | DocProject/Help/*.hhp
142 | DocProject/Help/Html2
143 | DocProject/Help/html
144 |
145 | # Click-Once directory
146 | publish/
147 |
148 | # Publish Web Output
149 | *.[Pp]ublish.xml
150 | *.azurePubxml
151 | # TODO: Comment the next line if you want to checkin your web deploy settings
152 | # but database connection strings (with potential passwords) will be unencrypted
153 | *.pubxml
154 | *.publishproj
155 |
156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
157 | # checkin your Azure Web App publish settings, but sensitive information contained
158 | # in these scripts will be unencrypted
159 | PublishScripts/
160 |
161 | # NuGet Packages
162 | *.nupkg
163 | # The packages folder can be ignored because of Package Restore
164 | **/packages/*
165 | # except build/, which is used as an MSBuild target.
166 | !**/packages/build/
167 | # Uncomment if necessary however generally it will be regenerated when needed
168 | #!**/packages/repositories.config
169 | # NuGet v3's project.json files produces more ignorable files
170 | *.nuget.props
171 | *.nuget.targets
172 |
173 | # Microsoft Azure Build Output
174 | csx/
175 | *.build.csdef
176 |
177 | # Microsoft Azure Emulator
178 | ecf/
179 | rcf/
180 |
181 | # Windows Store app package directories and files
182 | AppPackages/
183 | BundleArtifacts/
184 | Package.StoreAssociation.xml
185 | _pkginfo.txt
186 |
187 | # Visual Studio cache files
188 | # files ending in .cache can be ignored
189 | *.[Cc]ache
190 | # but keep track of directories ending in .cache
191 | !*.[Cc]ache/
192 |
193 | # Others
194 | ClientBin/
195 | ~$*
196 | *~
197 | *.dbmdl
198 | *.dbproj.schemaview
199 | *.jfm
200 | *.pfx
201 | *.publishsettings
202 | orleans.codegen.cs
203 |
204 | # Since there are multiple workflows, uncomment next line to ignore bower_components
205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
206 | #bower_components/
207 |
208 | # RIA/Silverlight projects
209 | Generated_Code/
210 |
211 | # Backup & report files from converting an old project file
212 | # to a newer Visual Studio version. Backup files are not needed,
213 | # because we have git ;-)
214 | _UpgradeReport_Files/
215 | Backup*/
216 | UpgradeLog*.XML
217 | UpgradeLog*.htm
218 |
219 | # SQL Server files
220 | *.mdf
221 | *.ldf
222 | *.ndf
223 |
224 | # Business Intelligence projects
225 | *.rdl.data
226 | *.bim.layout
227 | *.bim_*.settings
228 |
229 | # Microsoft Fakes
230 | FakesAssemblies/
231 |
232 | # GhostDoc plugin setting file
233 | *.GhostDoc.xml
234 |
235 | # Node.js Tools for Visual Studio
236 | .ntvs_analysis.dat
237 | node_modules/
238 |
239 | # Typescript v1 declaration files
240 | typings/
241 |
242 | # Visual Studio 6 build log
243 | *.plg
244 |
245 | # Visual Studio 6 workspace options file
246 | *.opt
247 |
248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
249 | *.vbw
250 |
251 | # Visual Studio LightSwitch build output
252 | **/*.HTMLClient/GeneratedArtifacts
253 | **/*.DesktopClient/GeneratedArtifacts
254 | **/*.DesktopClient/ModelManifest.xml
255 | **/*.Server/GeneratedArtifacts
256 | **/*.Server/ModelManifest.xml
257 | _Pvt_Extensions
258 |
259 | # Paket dependency manager
260 | .paket/paket.exe
261 | paket-files/
262 |
263 | # FAKE - F# Make
264 | .fake/
265 |
266 | # JetBrains Rider
267 | .idea/
268 | *.sln.iml
269 |
270 | # CodeRush
271 | .cr/
272 |
273 | # Python Tools for Visual Studio (PTVS)
274 | __pycache__/
275 | *.pyc
276 |
277 | # Cake - Uncomment if you are using it
278 | # tools/**
279 | # !tools/packages.config
280 |
281 | # Telerik's JustMock configuration file
282 | *.jmconfig
283 |
284 | # BizTalk build output
285 | *.btp.cs
286 | *.btm.cs
287 | *.odx.cs
288 | *.xsd.cs
--------------------------------------------------------------------------------
/BugSweeper.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28010.2019
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BugSweeper", "BugSweeper\BugSweeper\BugSweeper.csproj", "{853D3300-5056-4005-9E71-E5D933889581}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BugSweeper.iOS", "BugSweeper\BugSweeper.iOS\BugSweeper.iOS.csproj", "{96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BugSweeper.Android", "BugSweeper\BugSweeper.Android\BugSweeper.Android.csproj", "{2ECE01CE-B0FD-4D55-B92F-6A299528748E}"
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BugSweeper.UWP", "BugSweeper\BugSweeper.UWP\BugSweeper.UWP.csproj", "{00F33249-4F2C-4FFB-B428-740044D3725B}"
13 | EndProject
14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BugSweeperTile", "BugSweeper\BugSweeperTile\BugSweeperTile.csproj", "{927C9A6B-DB89-4950-9242-BAAE1558ABF5}"
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
19 | Ad-Hoc|ARM = Ad-Hoc|ARM
20 | Ad-Hoc|iPhone = Ad-Hoc|iPhone
21 | Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator
22 | Ad-Hoc|Mixed Platforms = Ad-Hoc|Mixed Platforms
23 | Ad-Hoc|x64 = Ad-Hoc|x64
24 | Ad-Hoc|x86 = Ad-Hoc|x86
25 | AppStore|Any CPU = AppStore|Any CPU
26 | AppStore|ARM = AppStore|ARM
27 | AppStore|iPhone = AppStore|iPhone
28 | AppStore|iPhoneSimulator = AppStore|iPhoneSimulator
29 | AppStore|Mixed Platforms = AppStore|Mixed Platforms
30 | AppStore|x64 = AppStore|x64
31 | AppStore|x86 = AppStore|x86
32 | Debug|Any CPU = Debug|Any CPU
33 | Debug|ARM = Debug|ARM
34 | Debug|iPhone = Debug|iPhone
35 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
36 | Debug|Mixed Platforms = Debug|Mixed Platforms
37 | Debug|x64 = Debug|x64
38 | Debug|x86 = Debug|x86
39 | Release|Any CPU = Release|Any CPU
40 | Release|ARM = Release|ARM
41 | Release|iPhone = Release|iPhone
42 | Release|iPhoneSimulator = Release|iPhoneSimulator
43 | Release|Mixed Platforms = Release|Mixed Platforms
44 | Release|x64 = Release|x64
45 | Release|x86 = Release|x86
46 | EndGlobalSection
47 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
48 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
49 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
50 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
51 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
52 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
53 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
54 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
55 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU
56 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU
57 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
58 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
59 | {853D3300-5056-4005-9E71-E5D933889581}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
60 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
61 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|Any CPU.Build.0 = Release|Any CPU
62 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|ARM.ActiveCfg = Release|Any CPU
63 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|iPhone.ActiveCfg = Release|Any CPU
64 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
65 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU
66 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU
67 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|x64.ActiveCfg = Debug|Any CPU
68 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|x64.Build.0 = Debug|Any CPU
69 | {853D3300-5056-4005-9E71-E5D933889581}.AppStore|x86.ActiveCfg = Release|Any CPU
70 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
71 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|Any CPU.Build.0 = Debug|Any CPU
72 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|ARM.ActiveCfg = Debug|Any CPU
73 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|ARM.Build.0 = Debug|Any CPU
74 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|iPhone.ActiveCfg = Debug|Any CPU
75 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
76 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
77 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
78 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
79 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|x64.ActiveCfg = Debug|Any CPU
80 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|x64.Build.0 = Debug|Any CPU
81 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|x86.ActiveCfg = Debug|Any CPU
82 | {853D3300-5056-4005-9E71-E5D933889581}.Debug|x86.Build.0 = Debug|Any CPU
83 | {853D3300-5056-4005-9E71-E5D933889581}.Release|Any CPU.ActiveCfg = Release|Any CPU
84 | {853D3300-5056-4005-9E71-E5D933889581}.Release|Any CPU.Build.0 = Release|Any CPU
85 | {853D3300-5056-4005-9E71-E5D933889581}.Release|ARM.ActiveCfg = Release|Any CPU
86 | {853D3300-5056-4005-9E71-E5D933889581}.Release|ARM.Build.0 = Release|Any CPU
87 | {853D3300-5056-4005-9E71-E5D933889581}.Release|iPhone.ActiveCfg = Release|Any CPU
88 | {853D3300-5056-4005-9E71-E5D933889581}.Release|iPhone.Build.0 = Release|Any CPU
89 | {853D3300-5056-4005-9E71-E5D933889581}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
90 | {853D3300-5056-4005-9E71-E5D933889581}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
91 | {853D3300-5056-4005-9E71-E5D933889581}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
92 | {853D3300-5056-4005-9E71-E5D933889581}.Release|Mixed Platforms.Build.0 = Release|Any CPU
93 | {853D3300-5056-4005-9E71-E5D933889581}.Release|x64.ActiveCfg = Release|Any CPU
94 | {853D3300-5056-4005-9E71-E5D933889581}.Release|x64.Build.0 = Release|Any CPU
95 | {853D3300-5056-4005-9E71-E5D933889581}.Release|x86.ActiveCfg = Release|Any CPU
96 | {853D3300-5056-4005-9E71-E5D933889581}.Release|x86.Build.0 = Release|Any CPU
97 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
98 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone
99 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
100 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
101 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhone.Deploy.0 = Ad-Hoc|iPhone
102 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
103 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
104 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Ad-Hoc|iPhoneSimulator
105 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|Mixed Platforms.ActiveCfg = Ad-Hoc|iPhone
106 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|Mixed Platforms.Build.0 = Ad-Hoc|iPhone
107 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|Mixed Platforms.Deploy.0 = Ad-Hoc|iPhone
108 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhoneSimulator
109 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone
110 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone
111 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|ARM.ActiveCfg = AppStore|iPhone
112 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
113 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhone.Build.0 = AppStore|iPhone
114 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhone.Deploy.0 = AppStore|iPhone
115 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
116 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
117 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|iPhoneSimulator.Deploy.0 = AppStore|iPhoneSimulator
118 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|Mixed Platforms.ActiveCfg = AppStore|iPhone
119 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|Mixed Platforms.Build.0 = AppStore|iPhone
120 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|Mixed Platforms.Deploy.0 = AppStore|iPhone
121 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|x64.ActiveCfg = AppStore|iPhoneSimulator
122 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.AppStore|x86.ActiveCfg = AppStore|iPhone
123 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|Any CPU.ActiveCfg = Debug|iPhone
124 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|ARM.ActiveCfg = Debug|iPhone
125 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhone.ActiveCfg = Debug|iPhone
126 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhone.Build.0 = Debug|iPhone
127 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhone.Deploy.0 = Debug|iPhone
128 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
129 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
130 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator
131 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|Mixed Platforms.ActiveCfg = Debug|iPhoneSimulator
132 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|Mixed Platforms.Build.0 = Debug|iPhoneSimulator
133 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
134 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Debug|x86.ActiveCfg = Debug|iPhone
135 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|Any CPU.ActiveCfg = Release|iPhone
136 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|ARM.ActiveCfg = Release|iPhone
137 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhone.ActiveCfg = Release|iPhone
138 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhone.Build.0 = Release|iPhone
139 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhone.Deploy.0 = Release|iPhone
140 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
141 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
142 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
143 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|Mixed Platforms.ActiveCfg = Release|iPhone
144 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|Mixed Platforms.Build.0 = Release|iPhone
145 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|Mixed Platforms.Deploy.0 = Release|iPhone
146 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|x64.ActiveCfg = Release|iPhoneSimulator
147 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}.Release|x86.ActiveCfg = Release|iPhone
148 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
149 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
150 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU
151 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
152 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
153 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
154 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU
155 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU
156 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|Any CPU
157 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
158 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
159 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|x64.Deploy.0 = Debug|Any CPU
160 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
161 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
162 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Any CPU.Build.0 = Release|Any CPU
163 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Any CPU.Deploy.0 = Release|Any CPU
164 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|ARM.ActiveCfg = Release|Any CPU
165 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|iPhone.ActiveCfg = Release|Any CPU
166 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
167 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU
168 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU
169 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|Mixed Platforms.Deploy.0 = Release|Any CPU
170 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|x64.ActiveCfg = Debug|Any CPU
171 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|x64.Build.0 = Debug|Any CPU
172 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|x64.Deploy.0 = Debug|Any CPU
173 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.AppStore|x86.ActiveCfg = Release|Any CPU
174 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
175 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Any CPU.Build.0 = Debug|Any CPU
176 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
177 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|ARM.ActiveCfg = Debug|Any CPU
178 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
179 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
180 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
181 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
182 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU
183 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|x64.ActiveCfg = Debug|Any CPU
184 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|x64.Build.0 = Debug|Any CPU
185 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|x64.Deploy.0 = Debug|Any CPU
186 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Debug|x86.ActiveCfg = Debug|Any CPU
187 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Any CPU.ActiveCfg = Release|Any CPU
188 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Any CPU.Build.0 = Release|Any CPU
189 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Any CPU.Deploy.0 = Release|Any CPU
190 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|ARM.ActiveCfg = Release|Any CPU
191 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|iPhone.ActiveCfg = Release|Any CPU
192 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
193 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
194 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
195 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU
196 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|x64.ActiveCfg = Release|Any CPU
197 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}.Release|x86.ActiveCfg = Release|Any CPU
198 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Any CPU.ActiveCfg = Release|x86
199 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Any CPU.Build.0 = Release|x86
200 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Any CPU.Deploy.0 = Release|x86
201 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
202 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|ARM.Build.0 = Release|ARM
203 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|ARM.Deploy.0 = Release|ARM
204 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|iPhone.ActiveCfg = Release|x86
205 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|iPhone.Build.0 = Release|x86
206 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|iPhone.Deploy.0 = Release|x86
207 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x86
208 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86
209 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86
210 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|x86
211 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x64.ActiveCfg = Release|x64
212 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x64.Build.0 = Release|x64
213 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x64.Deploy.0 = Release|x64
214 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x86.ActiveCfg = Release|x86
215 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x86.Build.0 = Release|x86
216 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Ad-Hoc|x86.Deploy.0 = Release|x86
217 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Any CPU.ActiveCfg = Release|x86
218 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Any CPU.Build.0 = Release|x86
219 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Any CPU.Deploy.0 = Release|x86
220 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|ARM.ActiveCfg = Release|ARM
221 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|ARM.Build.0 = Release|ARM
222 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|ARM.Deploy.0 = Release|ARM
223 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhone.ActiveCfg = Release|x86
224 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhone.Build.0 = Release|x86
225 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhone.Deploy.0 = Release|x86
226 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhoneSimulator.ActiveCfg = Release|x86
227 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhoneSimulator.Build.0 = Release|x86
228 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|iPhoneSimulator.Deploy.0 = Release|x86
229 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Mixed Platforms.ActiveCfg = Release|x86
230 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Mixed Platforms.Build.0 = Release|x86
231 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|Mixed Platforms.Deploy.0 = Release|x86
232 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x64.ActiveCfg = Release|x64
233 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x64.Build.0 = Release|x64
234 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x64.Deploy.0 = Release|x64
235 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x86.ActiveCfg = Release|x86
236 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x86.Build.0 = Release|x86
237 | {00F33249-4F2C-4FFB-B428-740044D3725B}.AppStore|x86.Deploy.0 = Release|x86
238 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Any CPU.ActiveCfg = Debug|x86
239 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Any CPU.Build.0 = Debug|x86
240 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Any CPU.Deploy.0 = Debug|x86
241 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|ARM.ActiveCfg = Debug|ARM
242 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|ARM.Build.0 = Debug|ARM
243 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|ARM.Deploy.0 = Debug|ARM
244 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|iPhone.ActiveCfg = Debug|x86
245 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
246 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
247 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Mixed Platforms.Build.0 = Debug|x86
248 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
249 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x64.ActiveCfg = Debug|x64
250 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x64.Build.0 = Debug|x64
251 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x64.Deploy.0 = Debug|x64
252 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x86.ActiveCfg = Debug|x86
253 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x86.Build.0 = Debug|x86
254 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Debug|x86.Deploy.0 = Debug|x86
255 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|Any CPU.ActiveCfg = Release|x86
256 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|ARM.ActiveCfg = Release|ARM
257 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|ARM.Build.0 = Release|ARM
258 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|ARM.Deploy.0 = Release|ARM
259 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|iPhone.ActiveCfg = Release|x86
260 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|iPhoneSimulator.ActiveCfg = Release|x86
261 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|Mixed Platforms.ActiveCfg = Release|x86
262 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|Mixed Platforms.Build.0 = Release|x86
263 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|Mixed Platforms.Deploy.0 = Release|x86
264 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x64.ActiveCfg = Release|x64
265 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x64.Build.0 = Release|x64
266 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x64.Deploy.0 = Release|x64
267 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x86.ActiveCfg = Release|x86
268 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x86.Build.0 = Release|x86
269 | {00F33249-4F2C-4FFB-B428-740044D3725B}.Release|x86.Deploy.0 = Release|x86
270 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
271 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
272 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
273 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
274 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
275 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
276 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
277 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
278 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU
279 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU
280 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
281 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
282 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
283 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
284 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
285 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|Any CPU.Build.0 = Debug|Any CPU
286 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|ARM.ActiveCfg = Debug|Any CPU
287 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|ARM.Build.0 = Debug|Any CPU
288 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
289 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|iPhone.Build.0 = Debug|Any CPU
290 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
291 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
292 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU
293 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU
294 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|x64.ActiveCfg = Debug|Any CPU
295 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|x64.Build.0 = Debug|Any CPU
296 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|x86.ActiveCfg = Debug|Any CPU
297 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.AppStore|x86.Build.0 = Debug|Any CPU
298 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
299 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
300 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|ARM.ActiveCfg = Debug|Any CPU
301 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|ARM.Build.0 = Debug|Any CPU
302 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|iPhone.ActiveCfg = Debug|Any CPU
303 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|iPhone.Build.0 = Debug|Any CPU
304 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
305 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
306 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
307 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
308 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|x64.ActiveCfg = Debug|Any CPU
309 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|x64.Build.0 = Debug|Any CPU
310 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|x86.ActiveCfg = Debug|Any CPU
311 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Debug|x86.Build.0 = Debug|Any CPU
312 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
313 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|Any CPU.Build.0 = Release|Any CPU
314 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|ARM.ActiveCfg = Release|Any CPU
315 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|ARM.Build.0 = Release|Any CPU
316 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|iPhone.ActiveCfg = Release|Any CPU
317 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|iPhone.Build.0 = Release|Any CPU
318 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
319 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
320 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
321 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
322 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|x64.ActiveCfg = Release|Any CPU
323 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|x64.Build.0 = Release|Any CPU
324 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|x86.ActiveCfg = Release|Any CPU
325 | {927C9A6B-DB89-4950-9242-BAAE1558ABF5}.Release|x86.Build.0 = Release|Any CPU
326 | EndGlobalSection
327 | GlobalSection(SolutionProperties) = preSolution
328 | HideSolutionNode = FALSE
329 | EndGlobalSection
330 | GlobalSection(ExtensibilityGlobals) = postSolution
331 | SolutionGuid = {FD6069F1-B2B9-4C30-A44D-CD940D1423A7}
332 | EndGlobalSection
333 | GlobalSection(MonoDevelopProperties) = preSolution
334 | StartupItem = BugSweeper\BugSweeper.iOS\BugSweeper.iOS.csproj
335 | EndGlobalSection
336 | EndGlobal
337 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/BugSweeper.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {2ECE01CE-B0FD-4D55-B92F-6A299528748E}
7 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | Library
9 | Properties
10 | BugSweeper.Droid
11 | BugSweeper.Android
12 | 512
13 | true
14 | Resources\Resource.Designer.cs
15 | Properties\AndroidManifest.xml
16 | v11.0
17 | 1G
18 | 42f058a4
19 |
20 |
21 | True
22 | full
23 | false
24 | bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 | None
29 | True
30 | true
31 | 1G
32 | Xamarin
33 |
34 |
35 | pdbonly
36 | true
37 | bin\Release\
38 | TRACE
39 | prompt
40 | 4
41 | False
42 | false
43 | false
44 | false
45 | armeabi-v7a;x86
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | BugSweeper
80 | {853D3300-5056-4005-9E71-E5D933889581}
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Android.App;
4 | using Android.Content;
5 | using Android.Content.PM;
6 | using Android.Runtime;
7 | using Android.Views;
8 | using Android.Widget;
9 | using Android.OS;
10 |
11 | using Xamarin.Forms.Platform.Android;
12 |
13 | namespace BugSweeper.Droid
14 | {
15 | [Activity(Label = "BugSweeper", Theme = "@style/MainTheme", MainLauncher = true,
16 | ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
17 | public class MainActivity : FormsAppCompatActivity
18 | {
19 | protected override void OnCreate(Bundle bundle)
20 | {
21 | TabLayoutResource = Resource.Layout.Tabbar;
22 | ToolbarResource = Resource.Layout.Toolbar;
23 |
24 | base.OnCreate(bundle);
25 |
26 | Xamarin.Forms.Forms.Init(this, bundle);
27 |
28 | LoadApplication (new App ());
29 | }
30 | }
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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("BugSweeper.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("BugSweeper.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 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/Drawable/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/Drawable/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/Resource.Designer (BuildSurfacePro's conflicted copy 2014-09-17).cs:
--------------------------------------------------------------------------------
1 | #pragma warning disable 1591
2 | //------------------------------------------------------------------------------
3 | //
4 | // This code was generated by a tool.
5 | // Runtime Version:4.0.30319.34014
6 | //
7 | // Changes to this file may cause incorrect behavior and will be lost if
8 | // the code is regenerated.
9 | //
10 | //------------------------------------------------------------------------------
11 |
12 | [assembly: global::Android.Runtime.ResourceDesignerAttribute("BugSweeper.Droid.Resource", IsApplication=true)]
13 |
14 | namespace BugSweeper.Droid
15 | {
16 |
17 |
18 | [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
19 | public partial class Resource
20 | {
21 |
22 | static Resource()
23 | {
24 | global::Android.Runtime.ResourceIdManager.UpdateIdValues();
25 | }
26 |
27 | public static void UpdateIdValues()
28 | {
29 | }
30 |
31 | public partial class Attribute
32 | {
33 |
34 | static Attribute()
35 | {
36 | global::Android.Runtime.ResourceIdManager.UpdateIdValues();
37 | }
38 |
39 | private Attribute()
40 | {
41 | }
42 | }
43 |
44 | public partial class Drawable
45 | {
46 |
47 | // aapt resource value: 0x7f020000
48 | public const int Icon = 2130837504;
49 |
50 | static Drawable()
51 | {
52 | global::Android.Runtime.ResourceIdManager.UpdateIdValues();
53 | }
54 |
55 | private Drawable()
56 | {
57 | }
58 | }
59 | }
60 | }
61 | #pragma warning restore 1591
62 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/drawable-hdpi/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/drawable-hdpi/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/drawable-ldpi/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/drawable-ldpi/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/drawable-mdpi/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/drawable-mdpi/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/drawable-xhdpi/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/drawable-xhdpi/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/drawable-xxhdpi/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.Android/Resources/drawable-xxhdpi/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/layout/Tabbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/layout/Toolbar.axml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #3F51B5
5 | #303F9F
6 | #FF4081
7 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
24 |
27 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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.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 |
18 | namespace BugSweeper.WinUniversal
19 | {
20 | ///
21 | /// Provides application-specific behavior to supplement the default Application class.
22 | ///
23 | sealed partial class App : Application
24 | {
25 | ///
26 | /// Initializes the singleton application object. This is the first line of authored code
27 | /// executed, and as such is the logical equivalent of main() or WinMain().
28 | ///
29 | public App()
30 | {
31 | this.InitializeComponent();
32 | this.Suspending += OnSuspending;
33 | }
34 |
35 | ///
36 | /// Invoked when the application is launched normally by the end user. Other entry points
37 | /// will be used such as when the application is launched to open a specific file.
38 | ///
39 | /// Details about the launch request and process.
40 | protected override void OnLaunched(LaunchActivatedEventArgs e)
41 | {
42 |
43 | #if DEBUG
44 | if (System.Diagnostics.Debugger.IsAttached)
45 | {
46 | this.DebugSettings.EnableFrameRateCounter = true;
47 | }
48 | #endif
49 |
50 | Frame rootFrame = Window.Current.Content as Frame;
51 |
52 | // Do not repeat app initialization when the Window already has content,
53 | // just ensure that the window is active
54 | if (rootFrame == null)
55 | {
56 | // Create a Frame to act as the navigation context and navigate to the first page
57 | rootFrame = new Frame();
58 |
59 | rootFrame.NavigationFailed += OnNavigationFailed;
60 | Xamarin.Forms.Forms.Init(e);
61 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
62 | {
63 | //TODO: Load state from previously suspended application
64 | }
65 |
66 | // Place the frame in the current Window
67 | Window.Current.Content = rootFrame;
68 | }
69 |
70 | if (rootFrame.Content == null)
71 | {
72 | // When the navigation stack isn't restored navigate to the first page,
73 | // configuring the new page by passing required information as a navigation
74 | // parameter
75 | rootFrame.Navigate(typeof(MainPage), e.Arguments);
76 | }
77 | // Ensure the current window is active
78 | Window.Current.Activate();
79 | }
80 |
81 | ///
82 | /// Invoked when Navigation to a certain page fails
83 | ///
84 | /// The Frame which failed navigation
85 | /// Details about the navigation failure
86 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
87 | {
88 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
89 | }
90 |
91 | ///
92 | /// Invoked when application execution is being suspended. Application state is saved
93 | /// without knowing whether the application will be terminated or resumed with the contents
94 | /// of memory still intact.
95 | ///
96 | /// The source of the suspend request.
97 | /// Details about the suspend request.
98 | private void OnSuspending(object sender, SuspendingEventArgs e)
99 | {
100 | var deferral = e.SuspendingOperation.GetDeferral();
101 | //TODO: Save application state and stop any background activity
102 | deferral.Complete();
103 | }
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/BugSweeper.UWP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {00F33249-4F2C-4FFB-B428-740044D3725B}
8 | AppContainerExe
9 | Properties
10 | BugSweeper.WinUniversal
11 | BugSweeper.WinUniversal
12 | en-US
13 | UAP
14 | 10.0.16299.0
15 | 10.0.16299.0
16 | 14
17 | true
18 | 512
19 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
20 | BugSweeper.WinUniversal_TemporaryKey.pfx
21 |
22 |
23 | true
24 | bin\ARM\Debug\
25 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
26 | ;2008
27 | full
28 | ARM
29 | false
30 | prompt
31 | true
32 |
33 |
34 | bin\ARM\Release\
35 | TRACE;NETFX_CORE;WINDOWS_UWP
36 | true
37 | ;2008
38 | pdbonly
39 | ARM
40 | false
41 | prompt
42 | true
43 | true
44 |
45 |
46 | true
47 | bin\x64\Debug\
48 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
49 | ;2008
50 | full
51 | x64
52 | false
53 | prompt
54 | true
55 |
56 |
57 | bin\x64\Release\
58 | TRACE;NETFX_CORE;WINDOWS_UWP
59 | true
60 | ;2008
61 | pdbonly
62 | x64
63 | false
64 | prompt
65 | true
66 | true
67 |
68 |
69 | true
70 | bin\x86\Debug\
71 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
72 | ;2008
73 | full
74 | x86
75 | false
76 | prompt
77 | true
78 |
79 |
80 | bin\x86\Release\
81 | TRACE;NETFX_CORE;WINDOWS_UWP
82 | true
83 | ;2008
84 | pdbonly
85 | x86
86 | false
87 | prompt
88 | true
89 | true
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | App.xaml
99 |
100 |
101 | MainPage.xaml
102 |
103 |
104 |
105 |
106 |
107 | Designer
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | MSBuild:Compile
124 | Designer
125 |
126 |
127 | MSBuild:Compile
128 | Designer
129 |
130 |
131 |
132 |
133 | {853d3300-5056-4005-9e71-e5d933889581}
134 | BugSweeper
135 |
136 |
137 |
138 | 14.0
139 |
140 |
141 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
17 |
18 | namespace BugSweeper.WinUniversal
19 | {
20 | ///
21 | /// An empty page that can be used on its own or navigated to within a Frame.
22 | ///
23 | public sealed partial class MainPage
24 | {
25 | public MainPage()
26 | {
27 | this.InitializeComponent();
28 |
29 | LoadApplication(new BugSweeper.App());
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
13 |
14 |
15 |
16 |
17 | BugSweeper.WinUniversal
18 | Craig
19 | Assets\StoreLogo.png
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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("BugSweeper.WinUniversal")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("BugSweeper.WinUniversal")]
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)]
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.UWP/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | using Xamarin.Forms;
9 | using Xamarin.Forms.Platform.iOS;
10 |
11 | namespace BugSweeper.iOS
12 | {
13 | // The UIApplicationDelegate for the application. This class is responsible for launching the
14 | // User Interface of the application, as well as listening (and optionally responding) to
15 | // application events from iOS.
16 | [Register("AppDelegate")]
17 | public partial class AppDelegate : FormsApplicationDelegate
18 | {
19 | //
20 | // This method is invoked when the application has loaded and is ready to run. In this
21 | // method you should instantiate the window, load the UI into it and then make the window
22 | // visible.
23 | //
24 | // You have 17 seconds to return from this method, or iOS will terminate your application.
25 | //
26 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
27 | {
28 | Forms.Init();
29 | LoadApplication (new App ());
30 | return base.FinishedLaunching(app,options);
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/BugSweeper.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | {96C9E490-7BFD-4E51-AFF2-9E5C411C7D86}
7 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | Exe
9 | BugSweeper.iOS
10 | Resources
11 | FormsTemplateiOS
12 | ebf0880b
13 | Xamarin.iOS
14 |
15 |
16 | true
17 | full
18 | false
19 | bin\iPhoneSimulator\Debug
20 | DEBUG
21 | prompt
22 | 4
23 | false
24 | None
25 | True
26 | x86_64
27 | True
28 |
29 | NSUrlSessionHandler
30 |
31 |
32 | none
33 | true
34 | bin\iPhoneSimulator\Release
35 | prompt
36 | 4
37 | false
38 | None
39 |
40 | x86_64
41 | NSUrlSessionHandler
42 | true
43 |
44 |
45 | true
46 | full
47 | false
48 | bin\iPhone\Debug
49 | DEBUG
50 | prompt
51 | 4
52 | false
53 | true
54 | iPhone Developer
55 | ARM64
56 | NSUrlSessionHandler
57 |
58 |
59 | none
60 | true
61 | bin\iPhone\Release
62 | prompt
63 | 4
64 | false
65 | iPhone Developer
66 | ARM64
67 | NSUrlSessionHandler
68 |
69 |
70 | none
71 | True
72 | bin\iPhone\Ad-Hoc
73 | prompt
74 | 4
75 | False
76 | iPhone Distribution
77 | True
78 | ARM64
79 | NSUrlSessionHandler
80 |
81 |
82 | none
83 | True
84 | bin\iPhone\AppStore
85 | prompt
86 | 4
87 | False
88 | iPhone Distribution
89 | ARM64
90 | NSUrlSessionHandler
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | Designer
100 |
101 |
102 |
103 |
104 |
105 | BugSweeper
106 | {853D3300-5056-4005-9E71-E5D933889581}
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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 | 9.0
25 | CFBundleDisplayName
26 | BugSweeper
27 | CFBundleIdentifier
28 | com.yourcompany.BugSweeper
29 | CFBundleVersion
30 | 1.0
31 | CFBundleIconFiles
32 |
33 | Icon.png
34 | Icon@2x.png
35 | Icon-60@2x.png
36 | Icon-Small.png
37 | Icon-Small@2x.png
38 | Icon-Small-40.png
39 | Icon-Small-40@2x.png
40 | Default.png
41 | Default@2x.png
42 | Default-568h@2x.png
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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 BugSweeper.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 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.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("BugSweeper.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("BugSweeper.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 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon-60@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon-Small-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon-Small-40.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon-Small-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon-Small-40@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon-Small.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon-Small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon-Small@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper.iOS/Resources/Icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeper.iOS/Resources/Icon@2x.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper/App.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xamarin.Forms;
3 |
4 | namespace BugSweeper
5 | {
6 | public class App : Application
7 | {
8 | public App ()
9 | {
10 | MainPage = new BugSweeperPage();
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper/Board.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xamarin.Forms;
3 |
4 | namespace BugSweeper
5 | {
6 | class Board : AbsoluteLayout
7 | {
8 | // Alternative sizes make the tiles a tad small.
9 | const int COLS = 9; // 16
10 | const int ROWS = 9; // 16
11 | const int BUGS = 10; // 40
12 |
13 | Tile[,] tiles = new Tile[ROWS, COLS];
14 | int flaggedTileCount;
15 | bool isGameInProgress; // on first tap
16 | bool isGameInitialized; // on first double-tap
17 | bool isGameEnded;
18 |
19 | // Events to notify page.
20 | public event EventHandler GameStarted;
21 | public event EventHandler GameEnded;
22 |
23 | public Board()
24 | {
25 | for (int row = 0; row < ROWS; row++)
26 | for (int col = 0; col < COLS; col++)
27 | {
28 | Tile tile = new Tile(row, col);
29 | tile.TileStatusChanged += OnTileStatusChanged;
30 | this.Children.Add(tile);
31 | tiles[row, col] = tile;
32 | }
33 |
34 | SizeChanged += (sender, args) =>
35 | {
36 | double tileWidth = this.Width / COLS;
37 | double tileHeight = this.Height / ROWS;
38 |
39 | foreach (Tile tile in tiles)
40 | {
41 | Rectangle bounds = new Rectangle(tile.Col * tileWidth,
42 | tile.Row * tileHeight,
43 | tileWidth, tileHeight);
44 | AbsoluteLayout.SetLayoutBounds(tile, bounds);
45 | }
46 | };
47 |
48 | NewGameInitialize();
49 | }
50 |
51 | public void NewGameInitialize()
52 | {
53 | // Clear all the tiles.
54 | foreach (Tile tile in tiles)
55 | tile.Initialize();
56 |
57 | isGameInProgress = false;
58 | isGameInitialized = false;
59 | isGameEnded = false;
60 | this.FlaggedTileCount = 0;
61 | }
62 |
63 | public int FlaggedTileCount
64 | {
65 | set
66 | {
67 | if (flaggedTileCount != value)
68 | {
69 | flaggedTileCount = value;
70 | OnPropertyChanged();
71 | }
72 | }
73 | get
74 | {
75 | return flaggedTileCount;
76 | }
77 | }
78 |
79 | public int BugCount
80 | {
81 | get
82 | {
83 | return BUGS;
84 | }
85 | }
86 |
87 |
88 | // Not called until the first tile is double-tapped.
89 | void DefineNewBoard(int tappedRow, int tappedCol)
90 | {
91 | // Begin the assignment of bugs.
92 | Random random = new Random();
93 | int bugCount = 0;
94 |
95 | while (bugCount < BUGS)
96 | {
97 | // Get random row and column.
98 | int row = random.Next(ROWS);
99 | int col = random.Next(COLS);
100 |
101 | // Skip it if it's already a bug.
102 | if (tiles[row, col].IsBug)
103 | {
104 | continue;
105 | }
106 |
107 | // Avoid the tappedRow & Col & surrounding ones.
108 | if (row >= tappedRow - 1 &&
109 | row <= tappedRow + 1 &&
110 | col >= tappedCol - 1 &&
111 | col <= tappedCol + 1)
112 | {
113 | continue;
114 | }
115 |
116 | // It's a bug!
117 | tiles[row, col].IsBug = true;
118 |
119 | // Calculate the surrounding bug count.
120 | CycleThroughNeighbors(row, col,
121 | (neighborRow, neighborCol) =>
122 | {
123 | ++tiles[neighborRow, neighborCol].SurroundingBugCount;
124 | });
125 |
126 | bugCount++;
127 | }
128 | }
129 |
130 | void CycleThroughNeighbors(int row, int col, Action callback)
131 | {
132 | int minRow = Math.Max(0, row - 1);
133 | int maxRow = Math.Min(ROWS - 1, row + 1);
134 | int minCol = Math.Max(0, col - 1);
135 | int maxCol = Math.Min(COLS - 1, col + 1);
136 |
137 | for (int neighborRow = minRow; neighborRow <= maxRow; neighborRow++)
138 | for (int neighborCol = minCol; neighborCol <= maxCol; neighborCol++)
139 | {
140 | if (neighborRow != row || neighborCol != col)
141 | callback(neighborRow, neighborCol);
142 | }
143 | }
144 |
145 | void OnTileStatusChanged(object sender, TileStatus tileStatus)
146 | {
147 | if (isGameEnded)
148 | return;
149 |
150 | // With a first tile tapped, the game is now in progress.
151 | if (!isGameInProgress)
152 | {
153 | isGameInProgress = true;
154 |
155 | // Fire the GameStarted event.
156 | if (GameStarted != null)
157 | {
158 | GameStarted(this, EventArgs.Empty);
159 | }
160 | }
161 |
162 | // Update the "flagged" bug count before checking for a loss.
163 | int flaggedCount = 0;
164 |
165 | foreach (Tile tile in tiles)
166 | if (tile.Status == TileStatus.Flagged)
167 | flaggedCount++;
168 |
169 | this.FlaggedTileCount = flaggedCount;
170 |
171 | // Get the tile whose status has changed.
172 | Tile changedTile = (Tile)sender;
173 |
174 | // If it's exposed, some actions are required.
175 | if (tileStatus == TileStatus.Exposed)
176 | {
177 | if (!isGameInitialized)
178 | {
179 | DefineNewBoard(changedTile.Row, changedTile.Col);
180 | isGameInitialized = true;
181 | }
182 |
183 | if (changedTile.IsBug)
184 | {
185 | isGameInProgress = false;
186 | isGameEnded = true;
187 |
188 | // Fire the GameEnded event!
189 | if (GameEnded != null)
190 | {
191 | GameEnded(this, false);
192 | }
193 | return;
194 | }
195 |
196 | // Auto expose for zero surrounding bugs.
197 | if (changedTile.SurroundingBugCount == 0)
198 | {
199 | CycleThroughNeighbors(changedTile.Row, changedTile.Col,
200 | (neighborRow, neighborCol) =>
201 | {
202 | // Expose all the neighbors.
203 | tiles[neighborRow, neighborCol].Status = TileStatus.Exposed;
204 | });
205 | }
206 | }
207 |
208 | // Check for a win.
209 | bool hasWon = true;
210 |
211 | foreach (Tile til in tiles)
212 | {
213 | if (til.IsBug && til.Status != TileStatus.Flagged)
214 | hasWon = false;
215 |
216 | if (!til.IsBug && til.Status != TileStatus.Exposed)
217 | hasWon = false;
218 | }
219 |
220 | // If there's a win, celebrate!
221 | if (hasWon)
222 | {
223 | isGameInProgress = false;
224 | isGameEnded = true;
225 |
226 | // Fire the GameEnded event!
227 | if (GameEnded != null)
228 | {
229 | GameEnded(this, true);
230 | }
231 | return;
232 | }
233 | }
234 | }
235 | }
236 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper/BugSweeper.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 | full
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | MSBuild:UpdateDesignTimeXaml
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper/BugSweeperPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
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 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeper/BugSweeperPage.xaml.cs:
--------------------------------------------------------------------------------
1 | #pragma warning disable 4014 // for non-await'ed async call
2 |
3 | using System;
4 | using System.Linq;
5 | using System.Threading.Tasks;
6 | using Xamarin.Forms;
7 |
8 | namespace BugSweeper
9 | {
10 | public partial class BugSweeperPage : ContentPage
11 | {
12 | const string timeFormat = @"%m\:ss";
13 |
14 | bool isGameInProgress;
15 | DateTime gameStartTime;
16 |
17 | public BugSweeperPage()
18 | {
19 | InitializeComponent();
20 |
21 | board.GameStarted += (sender, args) =>
22 | {
23 | isGameInProgress = true;
24 | gameStartTime = DateTime.Now;
25 |
26 | Device.StartTimer(TimeSpan.FromSeconds(1), () =>
27 | {
28 | timeLabel.Text = (DateTime.Now - gameStartTime).ToString(timeFormat);
29 | return isGameInProgress;
30 | });
31 | };
32 |
33 | board.GameEnded += (sender, hasWon) =>
34 | {
35 | isGameInProgress = false;
36 |
37 | if (hasWon)
38 | {
39 | DisplayWonAnimation();
40 | }
41 | else
42 | {
43 | DisplayLostAnimation();
44 | }
45 | };
46 |
47 | PrepareForNewGame();
48 | }
49 |
50 | void PrepareForNewGame()
51 | {
52 | board.NewGameInitialize();
53 |
54 | congratulationsText.IsVisible = false;
55 | consolationText.IsVisible = false;
56 | playAgainButton.IsVisible = false;
57 | playAgainButton.IsEnabled = false;
58 |
59 | timeLabel.Text = new TimeSpan().ToString(timeFormat);
60 | isGameInProgress = false;
61 | }
62 |
63 | void OnMainContentViewSizeChanged(object sender, EventArgs args)
64 | {
65 | ContentView contentView = (ContentView)sender;
66 | double width = contentView.Width;
67 | double height = contentView.Height;
68 |
69 | bool isLandscape = width > height;
70 |
71 | if (isLandscape)
72 | {
73 | mainGrid.RowDefinitions[0].Height = 0;
74 | mainGrid.RowDefinitions[1].Height = new GridLength(1, GridUnitType.Star);
75 |
76 | mainGrid.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star);
77 | mainGrid.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
78 |
79 | Grid.SetRow(textStack, 1);
80 | Grid.SetColumn(textStack, 0);
81 | }
82 | else // portrait
83 | {
84 | mainGrid.RowDefinitions[0].Height = new GridLength(3, GridUnitType.Star);
85 | mainGrid.RowDefinitions[1].Height = new GridLength(5, GridUnitType.Star);
86 |
87 | mainGrid.ColumnDefinitions[0].Width = 0;
88 | mainGrid.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
89 |
90 | Grid.SetRow(textStack, 0);
91 | Grid.SetColumn(textStack, 1);
92 | }
93 | }
94 |
95 | // Maintains a square aspect ratio for the board.
96 | void OnBoardContentViewSizeChanged(object sender, EventArgs args)
97 | {
98 | ContentView contentView = (ContentView)sender;
99 | double width = contentView.Width;
100 | double height = contentView.Height;
101 | double dimension = Math.Min(width, height);
102 | double horzPadding = (width - dimension) / 2;
103 | double vertPadding = (height - dimension) / 2;
104 | contentView.Padding = new Thickness(horzPadding, vertPadding);
105 | }
106 |
107 | async void DisplayWonAnimation()
108 | {
109 | congratulationsText.Scale = 0;
110 | congratulationsText.IsVisible = true;
111 |
112 | // Because IsVisible has been false, the text might not have a size yet,
113 | // in which case Measure will return a size.
114 | double congratulationsTextWidth = congratulationsText.Measure(Double.PositiveInfinity, Double.PositiveInfinity).Request.Width;
115 |
116 | congratulationsText.Rotation = 0;
117 | congratulationsText.RotateTo(3 * 360, 1000, Easing.CubicOut);
118 |
119 | double maxScale = 0.9 * board.Width / congratulationsTextWidth;
120 | await congratulationsText.ScaleTo(maxScale, 1000);
121 |
122 | foreach (View view in congratulationsText.Children)
123 | {
124 | view.Rotation = 0;
125 | view.RotateTo(180);
126 | await view.ScaleTo(3, 100);
127 | view.RotateTo(360);
128 | await view.ScaleTo(1, 100);
129 | }
130 |
131 | await DisplayPlayAgainButton();
132 | }
133 |
134 | async void DisplayLostAnimation()
135 | {
136 | consolationText.Scale = 0;
137 | consolationText.IsVisible = true;
138 |
139 | // (See above for rationale)
140 | double consolationTextWidth = consolationText.Measure(Double.PositiveInfinity, Double.PositiveInfinity).Request.Width;
141 |
142 | double maxScale = 0.9 * board.Width / consolationTextWidth;
143 | await consolationText.ScaleTo(maxScale, 1000);
144 | await Task.Delay(1000);
145 | await DisplayPlayAgainButton();
146 | }
147 |
148 | async Task DisplayPlayAgainButton()
149 | {
150 | playAgainButton.Scale = 0;
151 | playAgainButton.IsVisible = true;
152 | playAgainButton.IsEnabled = true;
153 |
154 | // (See above for rationale)
155 | double playAgainButtonWidth = playAgainButton.Measure(Double.PositiveInfinity, Double.PositiveInfinity).Request.Width;
156 |
157 | double maxScale = board.Width / playAgainButtonWidth;
158 | await playAgainButton.ScaleTo(maxScale, 1000, Easing.SpringOut);
159 | }
160 |
161 | void OnplayAgainButtonClicked(object sender, object EventArgs)
162 | {
163 | PrepareForNewGame();
164 | }
165 | }
166 | }
167 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeperTile/BugSweeperTile.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/BugSweeper/BugSweeperTile/Images/RedBug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeperTile/Images/RedBug.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeperTile/Images/Xamarin120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/BugSweeper/BugSweeperTile/Images/Xamarin120.png
--------------------------------------------------------------------------------
/BugSweeper/BugSweeperTile/Tile.cs:
--------------------------------------------------------------------------------
1 | #define FIX_UWP_DOUBLE_TAPS // Double-taps don't work well on UWP as of 2.3.0
2 | #define FIX_UWP_NULL_CONTENT // Set Content of Frame to null doesn't work in UWP as of 2.3.0
3 |
4 | using System;
5 | using Xamarin.Forms;
6 |
7 | namespace BugSweeper
8 | {
9 | public enum TileStatus
10 | {
11 | Hidden,
12 | Flagged,
13 | Exposed
14 | }
15 |
16 | public class Tile : Frame
17 | {
18 | TileStatus tileStatus = TileStatus.Hidden;
19 | Label label;
20 | Image flagImage, bugImage;
21 | static ImageSource flagImageSource;
22 | static ImageSource bugImageSource;
23 | bool doNotFireEvent;
24 |
25 | public event EventHandler TileStatusChanged;
26 |
27 | static Tile()
28 | {
29 | flagImageSource = ImageSource.FromResource("BugSweeperTile.Images.Xamarin120.png", typeof(Tile));
30 | bugImageSource = ImageSource.FromResource("BugSweeperTile.Images.RedBug.png", typeof(Tile));
31 | }
32 |
33 | public Tile(int row, int col)
34 | {
35 | this.Row = row;
36 | this.Col = col;
37 |
38 | this.BackgroundColor = Color.Yellow;
39 | this.BorderColor = Color.Blue;
40 | this.Padding = 2;
41 |
42 | label = new Label
43 | {
44 | Text = " ",
45 | TextColor = Color.Yellow,
46 | BackgroundColor = Color.Blue,
47 | HorizontalTextAlignment = TextAlignment.Center,
48 | VerticalTextAlignment = TextAlignment.Center,
49 | };
50 |
51 | flagImage = new Image
52 | {
53 | Source = flagImageSource,
54 |
55 | };
56 |
57 | bugImage = new Image
58 | {
59 | Source = bugImageSource
60 | };
61 |
62 | TapGestureRecognizer singleTap = new TapGestureRecognizer
63 | {
64 | NumberOfTapsRequired = 1
65 | };
66 | singleTap.Tapped += OnSingleTap;
67 | this.GestureRecognizers.Add(singleTap);
68 |
69 | #if FIX_UWP_DOUBLE_TAPS
70 |
71 | if (Device.RuntimePlatform != Device.UWP)
72 | {
73 |
74 | #endif
75 |
76 | TapGestureRecognizer doubleTap = new TapGestureRecognizer
77 | {
78 | NumberOfTapsRequired = 2
79 | };
80 | doubleTap.Tapped += OnDoubleTap;
81 | this.GestureRecognizers.Add(doubleTap);
82 |
83 | #if FIX_UWP_DOUBLE_TAPS
84 |
85 | }
86 |
87 | #endif
88 |
89 | }
90 |
91 | public int Row { private set; get; }
92 |
93 | public int Col { private set; get; }
94 |
95 | public bool IsBug { set; get; }
96 |
97 | public int SurroundingBugCount { set; get; }
98 |
99 | public TileStatus Status
100 | {
101 | set
102 | {
103 | if (tileStatus != value)
104 | {
105 | tileStatus = value;
106 |
107 | switch (tileStatus)
108 | {
109 | case TileStatus.Hidden:
110 | this.Content = null;
111 |
112 | #if FIX_UWP_NULL_CONTENT
113 |
114 | if (Device.RuntimePlatform == Device.UWP)
115 | {
116 | this.Content = new Label { Text = " " };
117 | }
118 |
119 | #endif
120 | break;
121 |
122 | case TileStatus.Flagged:
123 | this.Content = flagImage;
124 | break;
125 |
126 | case TileStatus.Exposed:
127 | if (this.IsBug)
128 | {
129 | this.Content = bugImage;
130 | }
131 | else
132 | {
133 | this.Content = label;
134 | label.Text =
135 | (this.SurroundingBugCount > 0) ?
136 | this.SurroundingBugCount.ToString() : " ";
137 | }
138 | break;
139 | }
140 |
141 | if (!doNotFireEvent && TileStatusChanged != null)
142 | {
143 | TileStatusChanged(this, tileStatus);
144 | }
145 | }
146 | }
147 | get
148 | {
149 | return tileStatus;
150 | }
151 | }
152 |
153 | // Does not fire TileStatusChanged events.
154 | public void Initialize()
155 | {
156 | doNotFireEvent = true;
157 | this.Status = TileStatus.Hidden;
158 | this.IsBug = false;
159 | this.SurroundingBugCount = 0;
160 | doNotFireEvent = false;
161 | }
162 |
163 | #if FIX_UWP_DOUBLE_TAPS
164 |
165 | bool lastTapSingle;
166 | DateTime lastTapTime;
167 |
168 | #endif
169 |
170 | void OnSingleTap(object sender, object args)
171 | {
172 |
173 | #if FIX_UWP_DOUBLE_TAPS
174 |
175 | if (Device.RuntimePlatform == Device.UWP)
176 | {
177 | if (lastTapSingle && DateTime.Now - lastTapTime < TimeSpan.FromMilliseconds(500))
178 | {
179 | OnDoubleTap(sender, args);
180 | lastTapSingle = false;
181 | }
182 | else
183 | {
184 | lastTapTime = DateTime.Now;
185 | lastTapSingle = true;
186 | }
187 | }
188 |
189 | #endif
190 |
191 | switch (this.Status)
192 | {
193 | case TileStatus.Hidden:
194 | this.Status = TileStatus.Flagged;
195 | break;
196 |
197 | case TileStatus.Flagged:
198 | this.Status = TileStatus.Hidden;
199 | break;
200 |
201 | case TileStatus.Exposed:
202 | // Do nothing
203 | break;
204 | }
205 | }
206 |
207 | void OnDoubleTap(object sender, object args)
208 | {
209 | this.Status = TileStatus.Exposed;
210 | }
211 | }
212 | }
213 |
--------------------------------------------------------------------------------
/Metadata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | E20DE4F0-BF01-496C-B52C-4C764CCB4F6B
4 | true
5 | Intermediate
6 | User Interface, Touch, Graphics, Xamarin.Forms
7 | Android, iOS, windows-rt
8 | Indie
9 | true
10 | A familiar game with a new twist.
11 |
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is an example repository that demonstrates integrating [Dotfuscator](https://www.preemptive.com/products/dotfuscator/overview) protection into a Xamarin app.
2 |
3 | This branch contains the unprotected version of the BugSweeper Sample project.
4 | The process for integrating Dotfuscator protection into this project can be found on the other branches:
5 | * Follow the **protected-professional** branch if you are using Dotfuscator Professional 4.37.0 or later. Additional help can be found in the [Protect Your App](https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_protect.html#integrate-xamarin) section of our Dotfuscator Professional User Guide.
6 | * Follow the **protected-community** branch if you are using either Dotfuscator Community or a version of Dotfuscator Professional earlier than 4.37.0. Additional help can be found in the [Xamarin Getting Started](https://www.preemptive.com/dotfuscator/ce/docs/help/getting_started_xamarin.html) section in our Dotfuscator Community User Guide.
7 |
8 | You can download the original app from .
9 | Please note however, we split out the Tile.cs class into a separate .NET Standard class library (BugSweeperTile.dll) to demonstrate more of Dotfuscator's protection.
10 |
11 | Original README from the Xamarin app follows.
12 |
13 | ----------------------------------
14 |
15 |
16 | BugSweeper
17 | ======
18 |
19 | This is a familiar game with a new twist. Ten bugs are hidden in a 9-by-9 grid of tiles.
20 | To win, you must find and flag all ten bugs.
21 |
22 | Begin playing by double tapping any tile. That first double tap is always safe.
23 | Thereafter, numbers indicate the number of surrounding tiles with bugs.
24 | If you know that a tile has a bug, flag it (or unflag it) with a single tap.
25 | Avoid double-tapping a tile with a bug!
26 |
27 | **Original author**: Charles Petzold
--------------------------------------------------------------------------------
/Screenshots/01Android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/Screenshots/01Android.png
--------------------------------------------------------------------------------
/Screenshots/01iOS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/Screenshots/01iOS.png
--------------------------------------------------------------------------------
/Screenshots/01wp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/Screenshots/01wp.png
--------------------------------------------------------------------------------
/Screenshots/UWP.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/Screenshots/UWP.png
--------------------------------------------------------------------------------
/Screenshots/Windows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/preemptive/protected-bugsweeper/d6c1f92f585d5c404eeadc3bb44b6825c7bea64d/Screenshots/Windows.png
--------------------------------------------------------------------------------