How to embed MacRuby in your app from XCode? - objective-c

I'm trying to "deploy" a MacRuby 0.10 app that has MacRuby embedded so that I can distribute my app to users without MacRuby installed. I can't seem to figure out how to deploy an app like this from XCode 4. How can I do this?

Embedding MacRuby
After following the steps found in this article I realized that I needed to add an additional build target. There are other steps in that article that you will need to follow. I had already done them, so I didn't need to.
Archiving an app with spaces in the name
I also ran across an issue since the name of my app had a space in it. If your app name has a space, you will need to create a Custom Archive Name that doesn't include spaces. To create a Custom Archive Name:
Edit the Deployment Scheme
Click on the Archive tab
Then specify an Archive Name that doesn't have spaces in it.
Now I'm able to embed MacRuby when I "archive" my app in order to distribute it to my co-workers.

Related

Change application ID for Crashlytics

I change my application id as part of my build process depending on the build type (Changing only Application ID, not package name). However my Fabric crashes are all going to the same app. I suppose this is because Fabric looks at what is defined in the AndroidManifest and not what is in build.gradle, but is there a way to change this programmatically?
I see a crashlytics.injectingBuildId which might be relevant but I have no clue what this does (or where I can find docs around this).

How to using ScriptingBridge in the entitlements

I wanna control 'Finder' in my app, so I can minimize Finder. I tried ScriptingBridge, but it doesn't work in Sanboxed. But it works when the app is not sandboxed. So I check the Apple's developer documents, seems that I have to set com.apple.security.scripting-targets in entitlements when I need to use ScriptingBridge in sandbox. But it doesn't say anything about the setting, so what should I do in the setting in order to control finder? Thanks in advance.
here is entitlements :
com.apple.security.scripting-targets
???????
????
Finder does not have any scripting access groups. You could add the temporary exception com.apple.security.temporary-exception.apple-events as documented here.
To find scripting targets see here: How can I know the Apple Event Access Groups used by an application?
If you'd like to distribute your app in App Store, however, you're out of luck. By scripting Finder, your app will not pass the review into the App Store.
Finder does not have any scripting access groups on purpose, because it lets you dodge sandbox file system restrictions. (As the other answer mentions, you could use the old temporary-exception.apple-events entitlement to script Finder anyway, but it won't pass store review.) Try using NSWorkspace instead, in particular the -openFile, -launchApplication, and -selectFile methods. If by "minimize" you really meant "hide", then see -[NSRunningApplication hide].

How to automatic distinguish two iOS app build packages

I am developing an iOS app and are using Testflight to send the app to my testers. In this app version I have a feedback form which the users is using to send me feedback. I want a good way to automatic distinguish some code in this build from the build I will send to AppStore.
Example:
#ifdef TestFlightPackage
//code for the feedback form
#endif
I can add a preprocessor macro for instance
TestFlightPackage=1
But I donĀ“t want to change this everytime I create a package. I want a way to solve this automatic. Compare to publish profile in Visual Studio. If I choose Publish profile "Release" the flag is TestFlightPackage=0 (or the flag removed) and if I choose Publish profile "Testing" I will get TestFlightPackage=1
Which is the best solution for this?
For this purpose you need to create different schemes.You can find here a detailed answer on the similar question.

Are there any update frameworks for iOS apps?

I need to be able to update my app from within the app itself. I know Sparkle works for Mac Apps but I can't seem to find any for iOS.
Edit: I am not asking how to bypass the review process. I was thinking that there might be frameworks similar to Clutch.io that allow updates to images/documents/etc from within the app. Or things like UrbanAirship that manage in app purchase data that allows an app to be extended from the app itself.
You can't replace your app with an updated one (except through the App Store) and you can't replace parts of your app with updated parts (that would make your app's code signature invalid); you can only update stuff that's outside of your app's bundle.
You can't update the app binary yourself, the system is responsible for updating all apps.
Though, if you just want to update some data in your app you can do that for sure.
Here is what I was looking for:
http://code.google.com/p/cooliris-toolkit/
It has a class called RemoteUpdater which allows me to download zip files of images/data or whatever I like to extend my content.
Depends on your needs. If you dont want to see the app you can also do an Enterprise Deploy.
Used by corporations to distribute apps to their clients or employees.
Needs a separate Apple account which costs more.
Uses same process as deploy to appstore
Archive > Distribute > create ipa/plist > copy these to webserver with html page with link to plist and user clicks on link from Safari on iOS Device and it installs.
Going back to CArpp Store review process after that is painful.

Get droplet path without making app document based

I have a fairly straightforward question about using droplets for my mac application. My app is not a document based app.
Is there any way to get the path of the item that was dropped? How would I go about implementing this if that was the case? I have looked into this, and it doesn't look like I can do droplets at all without making my app document based, which I really don't want to do.
Thanks ahead of time!
You don't have to use NSDocument at all to make a droplet. Just include CFBundleDocumentTypes in your Info.plist (see Storing Document Types Information in the Application's Property List for details) and implement application:openFile: in your app delegate (there are variants of this method for multiple files etc.).