Thoroughly confused by QField iOS

I am being very unsuccessful using QField iOS, and not finding any help in the online docs. We can take this one step at a time, and I appreciate any help or guidance.

For background, I am using QField, not QFieldCloud. I will likely try Cloud at some point, but I want to see this work with just manually moving data between my iPad and QGIS on a Mac. Here is what I’m doing, my questions, and things I’m stuck on. I welcome any suggestions.

  • In QGIS, I have the QField plugin installed, and I am able to create a package for QField.
  • From there, I drag and drop it using Finder from a folder on the Mac to the QField app on the iPad. Initially there are three folders on the iPad; “Imported Datasets”, “Imported Projects”, and “QField”. I drag and drop my package folder (the whole folder) to the root for the app. That creates a 4th fold called “Twistedtree” which is the name of my project. First question is whether I’m placing this in the correct location?
  • Now on the iPad, I launch QField adn select “Open local file”. That presents me with Folders and Favorites. I pick “QField files directory” under Folders. Now I see the same 4 folders that were visible through Finder on the Mac. This is where things diverge from the documentation. The docs say to import you project, but there is no such option. If I open the “Twistedtree” folder (my project folder) is shows a project called Twistedtree_qfield. I’m not sure why it’s been renamed, but I roll with it adn open that project.
  • The project opens successfully, and aside from regular app crashes, and regular failure to redraw everything, it seems to mostly work. My data is all there and things are looking good.
  • Then I add a few new points to an existing layer using the app, and that seems to work fine. Now it’s time to sync back to the original project on my mac, and this is where things don’t work so well. The docs say to copy my project folder from the iPad back to my Mac, so I do that using Finder. I drag and drop the Tiwstedtree folder back to the Mac.
  • Then in QGIS, with my original project open, I clock on the QFieldSync and select “Syncronize from QField”. I browse to the project folder that I just copied over from the iPad and select it. Then I click “Synchronize”. The process runs and completes, but I get a banner error saying that “The project you imported doesn’t seem to be an offline project”. And what QGIS has done is open the “Twistedtree_qfiled” project. The data that I edited on the iPad is there, but it’s in the other project, not merged into my orignal project. So somewhere along the way I’m doing something wrong.

Any suggestions? So far I haven’t been able to get QField to do the one thing it’s supposed to do, which is the sync field data back to the main project.


Imported from GitHub discussion by @Twistedtree51 on 2023-12-24T20:18:39Z

Twistedtree51 , greetings.

The workflow you’re describing here seems appropriate. If you found the documentation confusing and want to join the community in bettering QField, feel most welcome to provide some suggestions on wording improvements. You can do that via the QField documentation repository (GitHub - opengisch/QField-docs: Documentation for the QField ecosystem).

On the “regular app crashes, and regular failure to redraw everything”, the user base on QField iOS is smaller than on Android. Stability improvements goes through user reporting issues with clear steps to reproduce. If you are able to replicate any of the crashes and rendering failures, please take the time to file individual issues.

On QFieldSync seemingly not able to synchronize back, did you make sure that the layers you are editing in QField are set to “offline editing” in the project property’s QField panel? Otherwise there will be nothing to synchronize back. I’m referring to this section (make sure you’re in the USB Cable tab and not the QFieldCloud tab):


Imported from GitHub comment by @nirvn on 2023-12-25T03:40:19Z

Thanks. I had not set any layers to Offline Editing, so fixed that. But QField can’t create the export package. I get the errors below, but I don’t see any way to tell which layer is causing the problem. Other than setting a few layers to Offline Editing, I haven’t added any layers or changed the CRS settings. Is anyone actually using the Mac+iOS version of this? It seems very Alpha-release.

2023-12-26T13:21:46 WARNING Used a ballpark transform from EPSG:4326 to NAD83 / Vermont
2023-12-26T13:21:51 WARNING Failed to package project. See message log (Python Error) for more details.
2023-12-26T13:21:51 WARNING Python error : An error has occurred while executing Python code: See message log (Python Error) for more details.

And the Python log shows:

2023-12-26T13:21:51 WARNING Traceback (most recent call last):
File “/Users/peterhayden/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/qfieldsync/gui/package_dialog.py”, line 180, in package_project
raise err
File “/Users/peterhayden/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/qfieldsync/gui/package_dialog.py”, line 176, in package_project
offline_convertor.convert()
File “/Users/peterhayden/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/qfieldsync/libqfieldsync.whl/libqfieldsync/offline_converter.py”, line 143, in convert
self._convert(project)
File “/Users/peterhayden/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/qfieldsync/libqfieldsync.whl/libqfieldsync/offline_converter.py”, line 261, in _convert
extent = QgsCoordinateTransform(
_core.QgsCsException: Could not transform bounding box to target CRS


Imported from GitHub comment by @Twistedtree51 on 2023-12-26T18:25:56Z

Now I’m trying QFieldCloud and still having no success.

When I configure QFieldSync (the Cloud tab) in QGIS, I have a bunch of ortho photos set to “Remove from Project” to keep the size down. But when I then create the cloud project, selecting “Convert current project to cloud project”, the newly created project still includes all the orthos that I said to leave out. So what’s the point of that whole list of layers and selecting how to handle each?

Then after the cloud project is created, the new project is what’s open in QGIS, not the original project. Then I get another dialog where I can once again select how to sync everything. How is this different from what I set up in QFieldSync configuration? Why do both exist, what does each do, how are they different, and when do I use one vs the other?

I once again go through the tedious process of unchecking all the layers that I don’t want on the cloud. BTW, I’m going this because of the 100MB limit cloud data, trying the strip down the project so it will fit. But once again, unchecking all the ortho layers doesn’t seem to do anything, and when I “process actions”, it still tries to sync all the data to the cloud, and it fails miserably because it runs over quote.

And even if I can get it to work, what is the relationship between my original project, and the converter “cloud” project? Which do I open prior to doing a cloud sync? I’m presuming it’s the xyz_cloud version created by QFieldSycn on QGIS. OK, but what about my original project? Am I supposed to abandon that and forever use the new converted version? That doesn’t work because then I need to sync other layer changes (like from gov sources) manually rather than just dropping them into the map. Or do things eventually get synced back to it? Normally I would expect to find this in the product’s documentation, but there is none.

So using the cloud doesn’t seem to work either. The little bit that I got running on iOS was promising, including the ability to make field changes, but so far I have not been able to get any end-to-end synchronization to work either manually copying files, or using QFieldCloud.


Imported from GitHub comment by @Twistedtree51 on 2023-12-26T23:10:27Z

Twistedtree51 , interesting, you stumbled on an issue when handling a provided area of interest. I’ve opened PR with a fix here (Deal with failure to reproject area of interest bounding box by nirvn · Pull Request #59 · opengisch/libqfieldsync · GitHub), it should reach a public version of QFieldSync soon enough.

For the time being, what I would advise you is to uncheck the only copy features in area of interest checkbox (seen below):

That should hopefully be the last hurtle to a successful packaging for USB cable. I’ll comment on the QFieldCloud reply in a separate comment.


Imported from GitHub comment by @nirvn on 2023-12-27T15:09:06Z

Twistedtree51 , cloud projects are not quite like packaged (i.e. exported) projects that you prepare for USB cable transfers. A cloud project being uploaded from QGIS to the cloud is the original project, with original datasets. The settings that you apply in the QFieldCloud panel (copy layer, offline editing, or remove from project) are applied on the cloud sever when it goes through its own packaging process to prepare projects to be downloaded by QField itself.

Using QField, you can then add features to layers you have marked as offline editing (preferred format for those are geopackages), then push those changes in QField back to the cloud.

When you then use QGIS to synchronize the data from the cloud back to your computer, you can copy datasets from the cloud back into your local machine. Those datasets will reflect all of the changes pushed from QField back to the cloud.

When using the cloud converter, there is no relationship to the original project per say. The converter merely facilitates the creation of a cloud-compatible project where all the datasets need to be located within the folder (and subfolders) where your project file lives in.


Imported from GitHub comment by @nirvn on 2023-12-27T15:15:53Z

nirvn, thank you very much. I seem to have a particular skill for stepping on/in whatever bugs might be lurking. Unchecking the “Only copy area of interest” option allows the conversion to complete. It also correctly only copies the layers indicated in the Cable tab. Before they all seemed to be getting copied whether I asked for them or not. I have now been able to successfully get my map running on an iPad, made edits on the iPad, synced them back to QGIS on a Mac, made changes on teh Mac, and copied them to the iPad. Looks good!!


Imported from GitHub comment by @Twistedtree51 on 2023-12-27T20:53:09Z

As for QFieldCloud, thanks for the clarification. If I am following you correctly, when I create the package for the cloud from QGIS, QField Sync starts with my project that I’ll say is named “project”, creates a temporary converter project called “project_cloud”, then uploads project_cloud to QFieldCloud. Is that right? And I can then ignore or delete “project_cloud” on my computer? And subsequent sync operations will take place between “project” and “project_cloud” that is in the cloud?

As for which layers get copied/synced, here is the first place where handling of layers is spelled out.

If I follow you, this tells the cloud software which layers to exchange with the iOS device, but all the layers get sent to the cloud regardless of whether they are to be exchanged with the iOS device. Is that right? That means I need enough storage for my entire project regardless of which parts I plan to sync with the mobile device? I think that kills it for me since my project includes a pretty extensive set of ortho photos so is pretty big. Only a subset needs to be synced to the mobile device. The folder created with the Cable option, for example, is less than 400MB, but it seems I won’t be able to test with QFieldCloud without signing up for a subscription.

But I also still don’t understand how the above related to this.

What does this do vs what’s in the first dialog?


Imported from GitHub comment by @Twistedtree51 on 2023-12-27T21:13:15Z

If I am following you correctly, when I create the package for the cloud from QGIS, QField Sync starts with my project that I’ll say is named “project”, creates a temporary converter project called “project_cloud”, then uploads project_cloud to QFieldCloud. Is that right? And I can then ignore or delete “project_cloud” on my computer? And subsequent sync operations will take place between “project” and “project_cloud” that is in the cloud?

Twistedtree51 , slightly incorrect. The project you create referred as “project_cloud” isn’t meant to be temporary, it is meant to be the project itself which you should curate. It is the project that you will go to every time you want to download updated datasets from the cloud server through a sync operation.

If I follow you, this tells the cloud software which layers to exchange with the iOS device, but all the layers get sent to the cloud regardless of whether they are to be exchanged with the iOS device. Is that right?

That’s correct.

That means I need enough storage for my entire project regardless of which parts I plan to sync with the mobile device? I think that kills it for me since my project includes a pretty extensive set of ortho photos so is pretty big. Only a subset needs to be synced to the mobile device.

Right, so here, that’s why I’m hoping your growing understanding of the “project_cloud” will help you better manage your workflows. Because at the end of the day, there’s no easier way to deploy and get updated datasets than through the cloud.

Your “project_cloud” shouldn’t have these ortho photos in to begin with, you can leave them out of the “project_cloud” altogether.

Let’s add a third project reference, the “project_ortho”. That project should live as a distinct project to your “project_cloud”. In that project, you can include layers that are also in “project_cloud”, but then you will not drag those large ortho images in the cloud project you are curating.

What does this [synchronization dialog] do vs what’s in the first [project properties] dialog?

The synchronization dialog is how you upload or download your updated “project_cloud” project file and datasets contained within your project while the project properties dialog’s QField panel defines how the cloud server packages your project when serving it to QField.

TBH, the dialog title is at the moment bit confusing as it doesn’t do synchronization per say. It allows you to download datasets from the cloud server after they have been updated through QField’s pushed changes, or overwrite those datasets with what you have locally.


Imported from GitHub comment by @nirvn on 2023-12-28T03:10:03Z