What is Google Analytics?
Quoting Wikipedia, "Google Analytics is a freemium web analytics service offered by Google that tracks and reports website traffic.". Like most of the websites today, we use Analytics to track our traffic, but this is not why this page is about. Here, we gonna talk about Google Analytics in the Porting Kit app.
Google Analytics does not only tracks websites. It also offers an API, which can be used to track traffic from any place; from mobile to desktop apps. This is what we use in the Porting Kit application.
Which information do you collect?
The Porting Kit uses the Google Analytics API so we can collect information to keep improving the Porting Kit. Every collected piece of information is completely anonymous, to respect our users privacy. We collect:
- Screen Resolution: So we can decide our windows default size.
- macOS version: So we can decide if it's still worth to support old macOS versions.
- Video card model: So we can check if the video card name detection is working properly in case someone contact us.
- Video card type: So we can check if the video card type detection is working properly when people try to vote in ports.
- PK workflow: So we can identify which PK features are not been used, and if it's still worth to support them.
- User language: So we can check which languages would be good to look for support in PK.
- Port installations: So we can check the failure rate of a certain port installation, and fix it if needed.
- Error messages: So we can identify problems in early stages, and fix them as soon as possible.
- PK version: So we can check if the problems mentioned above are related with the latest version of PK.
What do you call 'PK workflow'?
Basically, the steps done while using PK, like opening the Library tab, showing a game description, and so on. Like said above, the information is collected in a completely anonymous way, so that kind of information is only checked in bunches, to see if certain features are really useful or not, or if they are placed difficult to find.
Which kind of errors you detect?
All kinds. In that way, we can see if many errors are receiving a same specific error, which clearly means that something is wrong with PK, and we have to fix it. To be more specific, the collected errors are the ones shown below. Be warn that those are almost every error that you may receive while using PK, so it's a very extense list.
- Missing video card device ID: The video card device ID is used to inform the ports which video card is it using. In order to fix that error, we collect with it: the names of the video card available datas, the video card name, vendor, vendor ID and raw device ID data (before been parsed, in case the video card was detected by the API instead of system_profiler; for more information, check the ObjectiveC_Extension source).
- Missing video card vendor ID: Same as above. We collect with that error: the names of the video card available datas, the video card name and raw vendor data.
- Missing video card memory size: Same as above. We collect with that error: the names of the video card available datas, the video card name, type, vendor ID, device ID, and raw memory size data.
- Missing video card type: The video card type (eg. Intel Iris) is used for voting in PK. In order to fix that error, we collect with it: the names of the video card available datas, the video card name, raw vendor data, vendor ID, device ID, device type (eg. GPU) and bus (eg. PCI).
- Missing every video card data: Basically, if none of the information above can be found, this is send instead. While that error already happened sometimes, we don't know why it happens yet, so the collected data is constantly changing. As today, we collect with that error: a boolean (yes or no value) telling if the user is the computer Admin, and a boolean telling if the user is being managed by Parental Controls. We don't know yet if the problem is related with those two things, so that might change in the future if that option is discarted.
- Crash log reports: A minority of the users send the complete crash logs. However, in order to still know if they are happening, we collect the crash log main message and send it has an error report. In that way, even if we can't debug it due to the lack of the full crash log report, we still know that something is going on, and it give us at least a clue.
- No source link in native app: If a native app has no source link that's reported has an error, since every native must have one.
- Grid view exception: The PK library grid view sometimes sends exceptions in the legacy version. We keep a look in that in case it intensifies, since we don't know what causes it, nor why it only happens in the legacy version.
- Library invalid actions: When a file is dropped in PK's library but it isn't supported, it's reported has an error, with the extension of the unsupported file. That allow us to give proper error messages, or even to add proper support, to other extensions, based in what everyone is trying to do.
- Screen recording error: If someone tries to use the screen recording feature and it fails, it's reported has an error. No information is sent, just the report. Although, until today, it never happened.
- Tab bar exception: The PK main tab bar sometimes sends exceptions in the legacy version. We keep a look in that in case it intensifies, since we don't know what causes it, nor why it only happens in the legacy version.
- Main EXE not found: After creating a port, if the Main EXE was not found, that's reported with the name of the port with the said issue. That may mean that GOG changed the EXE path of a game for example, which is a very normal circunstance.
- Other Main EXE: Like explained above, a Main EXE may not be found. In case the user has selected a different EXE in PK's replacement list, this report is sent instead, with the name of the port and the choosen path.
- Master wrapper copy failed: If that error happens, a port creation can barely start, so it's a very serious error. It's reported with the master wrapper version.
- Termination request: If a user cancel a port creation, that's reported as an error for a reason: the user may have done that because the port installation got stuck. So if many users request termination of a specific port creation, then we know that there may be something wrong with that port.
- Missing Framework binary: If the Wineskin Framework binary is missing, the port will never work. If PK fails to find the binary after copying the master wrapper for the third time, that error is reported with the master wrapper version.
- Engine corrupted: If PK fails to extract the engine that is needed for a port, it won't work. Considering that, when the extraction fails, this is reported. It might be an instability in the server causing a corrupted file, or maybe a failure in the uncompression system, or maybe the engine was corrupted during the upload to the server.
- Wine prefix creation fail: That indicates that the port couldn't be created properly, and that the reason couldn't be detected by the previous verifications. Considering that this should only happen in very rare conditions in the actual PK version, this is reported so we can check if it's still happening, and why. The master wrapper version and the engine version are collected with that error report.
- Winetrick checksum invalid: If the checksum of a winetrick doesn't match once, it may simply mean that the download was corrupted. However, if it fails three times, that means that the said file isn't matching with the checksum at all. That probably indicated that the file has changed, or maybe it was removed and PK is downloading a 404 page. That report contains the winetrick name and expected winetrick file name.
- Winetrick download failed: If the server which contains one of the needed winetrick files is unreachable, or even very unstable, PK may detect that the download failed, and that will be considered a different error from the above. The same data is contained in the report though.
- WSI corrupted: It means that a WSI file was unproperly uploaded to the PK database, or that PK's server is unstable, and due to that the downloaded WSI was broken. In any case, it means a problem in our side. That report contains the name of the app with the said corrupted WSI.
- Other installer used: Every PK WSI which installs DRM free apps (or CD/DVD apps) request an installer with a specific name. However, by cancelling that request, you may select an installer with a name that doesn't match with the expected one. That's useful since GOG sometimes change their installers names, and with that report we may know if that happened. The report contains the app name and the selected installer name.
- No installer used: If everything happens as above, but the user has no installer to select, PK will report it as a different error. That may mean that PK didn't explained properly that the user needed to download the game installer to proceed. That report contains the app name only.
- Engine unavailable: That error is launching if a WSI requires an engine that is not in the database, but does not provide a custom engine link. The name of the port and the name of the requested engine are then send with that error.
- Master wrapper download failed: If the master wrapper download fails, the port creation can't even start. That report sends nothing other than that information.
- Master wrapper corrupted: Like the problem above, if the master wrapper is corrupted, the port creation can't start. That report sends nothing other than that information.
I still prefer to do not share that information, even anonymously. How can I block that?
We do not recommend that, but if you really wish to do so: open the file ~/Library/Preferences/edu.ufrj.vitormm.Porting-Kit.plist (or edu.ufrj.vitormm.Porting-Kit-Legacy.plist if you are using Legacy) with your favorite text editor and add a key called "Disable Google Analytics API" (no quotes) with the boolean value TRUE.