-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug: Functions lack return values on Mojave / Xcode 10 #18
Comments
Hello, and thank you for checking out SwiftScripting. The Xcode command line tools need to be installed for the sbhc.py script to work properly. You can issue the command |
Thanks for the quick reply! I have installed the command line tools, but that makes no difference. I've spent some time diving into the issue by adding some logging to
Attempting to log the Question:Have you tested the script using Xcode 10 and Mojave? That's what I'm running on. I have not tried Xcode 9 and High Sierra. |
I'm also curious about anyone's experience with Xcode 10 & Mojave. I have an app using Scripting Bridge that worked fine on High Sierra but on Mojave the Scripting Bridge code compiles but doesn't do anything. I think it has something to do with the new security restrictions in 10.14. Haven't tackled fixing it yet but anyone else run into this and find a solution? I've run through all the obvious stuff like adding the app to the various categories in the Security pane of System Preferences, etc. Strangely, the OS is not popping up the permission request dialog like most other apps will when they try to script another app. |
@orchetect That's a different issue. Have you enabled the new Hardened Runtime for your app and granted the AppleEvents entitlement? You'll also need to add some specific keys to your info.plist file or the app will crash the first time you ask for permission to send an AppleEvent. (See the WWDC session video about it.) |
@bdkjones Thanks for the tip. I did watch some of the new Apple videos on this topic but that wasn't mentioned. |
@orchetect They spent a good while on it in the session about modern security and securing your app. |
@bdkjones Bingo. Works now after adding entitlements and plist entries. Re: your original post - that's a good idea. I haven't tested the script on Mojave yet but I remember even on Sierra I ran into problems that required a fair amount of hand-editing of the resulting output. And if I recall the script wasn't even working (some or all of the time). But I figured out what needed to go where. |
Well, I'm making progress. I went back to High Sierra and Xcode 9.4.1. When I ran Notice that the return values ARE now listed as children of each |
This is the extent of my abilities in Python, so I'm unable to take this farther. I can simply confirm that Xcode 10 on Mojave breaks the script, even when using the older clang python bindings. I'd love to see a fix! |
I'm motivated to fix the issue, but without a deep understanding of Clang's inner workings, I've had to enlist help. Hopefully somebody can figure out what's changed: https://stackoverflow.com/questions/52640399/libclang-python-binding-get-objc-method-return-value |
@tingraldi any ideas of what I should try? Happy to play around some more. |
@bdkjones I haven't yet made the leap to Mojave. I don't have any tips off the top of my head to get past this issue. I hope to get on Mojave before too long. If the Scripting Bridge is still viable there, we should be able to move forward. |
@tingraldi Ha! Has it ever really been viable? Tolerable, maybe. Infuriating, definitely. I sent an email to the Clang mailing list asking for their help. One guy who worked on the Python bindings replied and said he might take a look. I'm thinking something either (A) changed or (B) broke in Clang 10.0.0.0, which is the version shipped with Xcode 10. I've gone all the way up to the translation unit and logged every single cursor and every property/child I can get for each one: nothing turns up an ObjC return type. I'm giving it some time to see what the mailing list comes up with, but all I can think to do is ask the cursor for its location in the source file and then go manually pull any alphanumeric characters that appear in a |
@bdkjones @tingraldi @orchetect This should be solved by now either "with time" either with this PR I wasn't able to reproduce the issue. |
Excellent! Once @tingraldi merges that PR I’ll give it a shot and report back. |
Here is part of
Finder.h
generated in Objective-C, following Apple's usual instructions:And here is what gets generated for the Swift API:
The Issue
Notice that in the ObjC version,
-items
returns anSBElementArray
ofFinderItem
objects. In the Swift version, items() returns void. This is not correct and completely breaks the API.Manually changing the Swift file to:
Causes
items()
to return the expected value, which can then be used. I do not see how avoid
return can be appropriate here and believe this is a bug with the scripts translating the sdef into Swift.The text was updated successfully, but these errors were encountered: