1. Define app functionalities
Before you start building your fully offline app
- Will you be working with preconfigured 3D scenes or 2D maps?
- Will you be editing data offline and synchronizing offline edits?
- Will you be geocoding, routing, or finding an address using a locator file?
Once you have outlined the requirements of your fully offline app, you can begin to prepare a mobile data source.
2. Prepare a mobile data source
To start building a fully offline app, you first select a mobile data source as the foundation for your app. You can author an ArcGIS Pro.mmpk) or mobile scene package.mspk) to use in your offline app. Alternatively, you can generate or download data files
Use the following table to help select your mobile data source
| Mobile packages | Data files | |
|---|---|---|
| 2D maps | 1 | |
| 3D scenes | 2 | |
| Edit data while offline | 3 | |
| Synchronize offline edits | 4 | |
| Fully disconnected apps/devices | ||
| Offline geocoding | 5 | |
| Offline routing | 6 | |
| Offline analysis | ||
| Set expiration date for data access |
- 1. Map constructed in code
- 2. Scene constructed in code
- 3. Shapefiles, GeoPackages, and KML
- 4. Custom sideloading workflows required
- 5. Locator exported from ArcGIS Pro
- 6. Network Analysis dataset exported from ArcGIS Pro
Once you select a mobile data source, the general steps to prepare the mobile data source are:
- Go to ArcGIS Pro
ArcGIS Pro is a professional desktop GIS application that can explore, visualize, analyze, and manage 2D and 3D data. . - Start a new Map project if you are working with 2D maps. Or select a Global Scene or Local Scene project if you are working with 3D scenes.
- Set a basemap and add data into the project.
- Export the project into a mobile map package (
.mmpk) or mobile scene package (.mspk).
3. Build the app
Once you have prepared a mobile data source
Example code to access data from a mobile data source in an offline app:
try
{
var mobileMapPackage = await MobileMapPackage.OpenAsync(path: "path\\to\\file.mmpk");
await mobileMapPackage.LoadAsync();
MainMapView.Map = mobileMapPackage.Maps.First();
}
catch(Exception ex)
{
// Handle error.
}

