crasowas / app_store_required_privacy_manifest_analyser

A shell script used to analyze privacy manifests in the specified directory to ensure that your app complies with the App Store requirements.
MIT License
156 stars 13 forks source link

Frozen after 'Analyzing Target Directory' #11

Open mlch911 opened 5 months ago

mlch911 commented 5 months ago

When line 644 is executed, it gets stuck and cannot execute into analyze_api_usage method.

It works after I change this

results=($(analyze_api_usage "$dir_path" "${excluded_dirs[@]}"))

to the real path.

results=($(analyze_api_usage "$dir_path" ../heybox_ios3 ../heybox_ios3/Pods ../heybox_ios3/.symlinks/plugins ../heybox_ios3/Frameworks))

And I can ehco "${excluded_dirs[@]}". But it will stock when using this var.

crasowas commented 5 months ago

Could you please provide the full command when executing the script?

mlch911 commented 5 months ago

Could you please provide the full command when executing the script?

bash privacy_manifest_analyser.sh ../heybox_ios3

Even if I use the full path, it still gets stuck.

crasowas commented 5 months ago

I'm unable to reproduce the current issue, perhaps you could try debugging the script.

set -x
results=($(analyze_api_usage "$dir_path" "${excluded_dirs[@]}"))
set +x
mlch911 commented 5 months ago

I'm unable to reproduce the current issue, perhaps you could try debugging the script.

set -x
results=($(analyze_api_usage "$dir_path" "${excluded_dirs[@]}"))
set +x

I tried this and it felt like an endless loop that it couldn't stop.

Edited: Yes, it's a endless loop. It's always loop inside one local Pod folder.

crasowas commented 5 months ago

Could you offer further details regarding this local Pod folder?

crasowas commented 5 months ago

I'm unable to reproduce the current issue, perhaps you could try debugging the script.

set -x
results=($(analyze_api_usage "$dir_path" "${excluded_dirs[@]}"))
set +x

I tried this and it felt like an endless loop that it couldn't stop.

Edited: Yes, it's a endless loop. It's always loop inside one local Pod folder.

This seems to be an infinite loop possibly caused by symbolic links.

I've attempted to address it; feel free to give it a try.

mlch911 commented 5 months ago

I'm unable to reproduce the current issue, perhaps you could try debugging the script.

set -x
results=($(analyze_api_usage "$dir_path" "${excluded_dirs[@]}"))
set +x

I tried this and it felt like an endless loop that it couldn't stop. Edited: Yes, it's a endless loop. It's always loop inside one local Pod folder.

This seems to be an infinite loop possibly caused by symbolic links.

I've attempted to address it; feel free to give it a try.

I used the new script and it still gets stuck in the same place.

crasowas commented 5 months ago

More information is needed before I can proceed. Could you provide the logs printed during debugging mode? Or perhaps you'd like to attempt fixing it yourself? Your contribution to the project is welcome!

StevenSnary commented 5 months ago

@crasowas Thanks for taking the time to build this tool. I am experiencing the hanging issue.

Here is the code I'm running from my Flutter project directory

./privacy_manifest_analyser.sh -e ./build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Frameworks . >log.txt

I've excluded the specific build directory as it's just a repeat of the package names in the ios directory

Here is the log.txt file `

==================== Analyzing Target Directory ====================

💡 Found privacy manifest file(s): 19 [0] ./ios/Pods/FirebaseDynamicLinks/FirebaseDynamicLinks/Sources/Resources/PrivacyInfo.xcprivacy [1] ./ios/Pods/FirebaseFirestoreInternal/Firestore/Source/Resources/PrivacyInfo.xcprivacy [2] ./ios/Pods/FirebaseCore/FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy [3] ./ios/Pods/PromisesObjC/Sources/FBLPromises/Resources/PrivacyInfo.xcprivacy [4] ./ios/Pods/GoogleDataTransport/GoogleDataTransport/Resources/PrivacyInfo.xcprivacy [5] ./ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy [6] ./ios/Pods/gRPC-Core/src/objective-c/PrivacyInfo.xcprivacy [7] ./ios/Pods/FirebaseCoreExtension/FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy [8] ./ios/Pods/FirebaseFirestore/Firestore/Swift/Source/Resources/PrivacyInfo.xcprivacy [9] ./ios/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Resources/PrivacyInfo.xcprivacy [10] ./ios/Pods/GTMSessionFetcher/Sources/Core/Resources/PrivacyInfo.xcprivacy [11] ./ios/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy [12] ./ios/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Resources/PrivacyInfo.xcprivacy [13] ./ios/Pods/BoringSSL-GRPC/src/PrivacyInfo.xcprivacy [14] ./ios/Pods/gRPC-C++/src/objective-c/PrivacyInfo.xcprivacy [15] ./ios/Pods/GoogleUtilities/GoogleUtilities/Privacy/Resources/PrivacyInfo.xcprivacy [16] ./ios/Pods/leveldb-library/Resources/PrivacyInfo.xcprivacy [17] ./ios/Pods/nanopb/spm_resources/PrivacyInfo.xcprivacy [18] ./ios/Pods/abseil/PrivacyInfo.xcprivacy `

I will help in any way I can - just let me know

crasowas commented 5 months ago

@StevenSnary Please switch the analysis directory to the ios directory within your Flutter project.

This will trim down unnecessary scans of directories and files, accelerating the analysis while enhancing accuracy.

StevenSnary commented 5 months ago

I've moved the privacy_manifest_analyser.sh file to the ios directory and calling ./privacy_manifest_analyser.sh . is working without hanging.

Thanks @crasowas

StevenSnary commented 5 months ago

I've moved the privacy_manifest_analyser.sh file to the ios directory and calling ./privacy_manifest_analyser.sh . is working without hanging.

Thanks @crasowas

The Analysis is complete, took maybe 5-10mins to complete. Based on the analysis I expect that my warnings from submitting to Apple is coming from the firebase_auth and firebase_messaging dependencies - does that make sense?

Here are the Analysis Results...

` ==================== Analysis completed! 💡: 19 ⚠️ : 51 🛠️ : 12 ✅: 16 🎯: 15 ====================

⚠️ 🛠️ https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api 🎯 https://developer.apple.com/support/third-party-SDK-requirements

🔔 If the directory you are analyzing is the app project directory, your app's privacy manifest may be affected by these analysis results: 4 [0] NSPrivacyAccessedAPICategoryFileTimestamp:.creationDate:./.symlinks/plugins/firebase_auth/ios/Classes/PigeonParser.m [1] NSPrivacyAccessedAPICategoryFileTimestamp:.creationDate:./.symlinks/plugins/firebase_auth/macos/Classes/PigeonParser.m [2] NSPrivacyAccessedAPICategoryUserDefaults:UserDefaults,NSUserDefaults:./.symlinks/plugins/firebase_messaging/ios/Classes/FLTFirebaseMessagingPlugin.m [3] NSPrivacyAccessedAPICategoryUserDefaults:UserDefaults,NSUserDefaults:./.symlinks/plugins/firebase_messaging/macos/Classes/FLTFirebaseMessagingPlugin.m `

crasowas commented 5 months ago

@StevenSnary You're right, there may be better solutions in the future.

Non-dynamically linked libraries are fully copied into the executable file of the application bundle during compilation. Therefore, during the App Store review process, they are considered part of your app's code. This is why these analysis results could affect your app's privacy manifest.

StevenSnary commented 5 months ago

Thanks again for taking the time to create this tool - with the results I was able to go to the referenced packages and see that they both have an outstanding issue to address the privacy manifest issue uncovered by your script.

Steve Snary


This message and any attachment are privileged, confidential and contain private information. The information contained herein is not to be forwarded or shared with others in any way without the express consent of the sender. If you are not the addressee named above any disclosure, reproduction, copying, distribution, or other dissemination or use of this communication is prohibited. If you have received this transmission in error, please notify the sender immediately and destroy this e-mail.

On Wed, Apr 17, 2024 at 11:12 PM crasowas @.***> wrote:

@StevenSnary https://github.com/StevenSnary You're right, there may be better solutions in the future.

Non-dynamically linked libraries are fully copied into the executable file of the application bundle during compilation. Therefore, during the App Store review process, they are considered part of your app's code. This is why these analysis results could affect your app's privacy manifest.

— Reply to this email directly, view it on GitHub https://github.com/crasowas/app_store_required_privacy_manifest_analyser/issues/11#issuecomment-2062914270, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACPESNPLROD5QC5EPFHNDHLY542YDAVCNFSM6AAAAABGGXS6F2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANRSHEYTIMRXGA . You are receiving this because you were mentioned.Message ID: <crasowas/app_store_required_privacy_manifest_analyser/issues/11/2062914270 @github.com>