How to automatic distinguish two iOS app build packages - objective-c

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.

Related

Is there a way to update SMLoginItemBookmarks data on launchd overrides.plist

I'm working on an OS X app that most users choose to "launch at login", the kind you'd find at the menu bar.
In order to launch it at login I'm using SMLoginItemSetEnabled to launch a LoginHelper app that will open the main app, as described in this tutorial.
The app is failing to start up at login for just a handful of our users.
I was unable to reproduce this or to track the cause but I found (on a user's machine) that:
Deleting /Root/_com.apple.SMLoginItemBookmarks/[myapp] and /Root/[myapp] on /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist and then resetting the Launch at login on the app fixed the issue. Also, we diff'd the files and the Data on the bookmark had changed.
For reference, I found about the overrides.plist here.
Since the app has both a Mac App Store and a Direct download version, I'm suspecting multiple copies of the app setting themselves as Launch at login may be the reason for this to fail, maybe these "bookmarks" are trying to open another instance of the app, that may or may not be deleted.
Now the questions, provided that this app needs to remain sandboxed:
Is there a way of updating that Data on the overrides.plist bookmarks?
Is there any way of deleting one self's app from the overrides.plist to start clean?
Is this maybe a known issue?
Any other suggestions on why the bookmark seems to point nowhere or how to fix it will be appreciated.
Note: This is my first question on StackOverflow, please excuse me if I failed to follow some of the suggested etiquette.
I don't know a definitive solution to this, I wasn't even aware of the overrides.plist. It could be related to multiple copies. As far as I understand, adding login through SMLoginItemSetEnabled sets a metadata flag that this Bundle ID should be launched on start. Then Spotlight, on start, will go do a metadata search on the file system and see which Bundle IDs need to be launched. Then, I guess, it will initiate the launch using the bundle ID. In my own application, Trickster, which uses the same technique for launching, I see that if I enable launch-on-login through the app itself, it might pop-up this strange message which refers to a debug build. I'm not even sure why it says about the first time. Very strange.
So, to have them launched, you have to make sure that the relevant bundles are in locations where Spotlight indexes (that the user hasn't disable Spotlight for these locations). Usually users don't disable Spotlight, especially for /Applications/ but I'm just saying.
What I usually suggest when support comes my way (and how I have it set up for me because I have multiple copies), is I to disable launch from within the app and instead add the correct one (from /Applications) manually in Login Items in System Preferences.

How do I find a certain application on the user's PC and transfer data to it? (VB)

I'm developing an app on the Windows desktop so Win7 users have the app, but for Win8 users I'm also developing a Metro app.
My problems are,
if a user opens a file (e.g. "Blue.xyz"), I want an app to come up that asks which environment to open it in, but first it has to find all the apps that can open the file and display them.
Then I need to pass the data as a parameter to the app Chosen.
In the .NET framework 4.5.1, I can't find the System.GetEnvironmentVariable command so I can create a common location for both environments to access. These are my options:
Comment for clarification.
Regarding your 3rd question, the function is there, just now showing on MSDN page:
After having an inspiration, I found some code that can get pretty close to what I want.
Dim filepicker As New Windows.Storage.Pickers.FileOpenPicker
CommonFolder = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary
I should just be able to tack this on the end after that:
CommonFolder.Replace("\Documents","")
and it should give me "C:\Users\someuser" and then I can add "\MyAppStorage"
Thanks for all the help though! This code isn't very clean, so feel free to edit and make it better!

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.

How to embed MacRuby in your app from XCode?

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.

How do I create a button to check for updates and install them?

I can get the program to easily, upon startup, look for updates and then install them.
I want to have a button that the user can click that will check/install updates. Is this possible, if so how?
Edit: Sorry all, not ASP.NET; VB.NET only
This msdn page outlines your different options for ClickOnce updates. It explains how to check for updates before your application starts, after you application starts, or programmatically.
My guess is that you would probably want to combine one of the automatic checks (before or after application starting) with your programmatic check (on your button click).
This is not difficult. Presumably the update/install code is in its own routine. In the button's click event code, simply call the update/install routine used by the startup code.
Add an event to the button. In this event, you use something like the WebClient to retrieve an newer installation package from your server. Then verify its signature to make sure the code is really yours and install it on the local machine.
I noticed the asp.net tag on your question. Are you talking a desktop app or like from an admin page of a customer installed web application?
If it's a desktop app, just look into a ClickOnce deployment. It has that functionality built in.
Either I am not getting the big picture or it's because i work on a asp.net environment...
Anyway, I did something like you asked for our products (web applications) and it was anything but a simple task.
Here is how I did it:
1 - Build a back office application to release new product versions.
2 - Build a webService that received a given product and a version, checked if there was an update available, if so send it to the client.
3 - On the client when received an update, installed it.
I guess the update process will be easier to do on a windows application, my only advice is to be extremely careful when doing it. Always make a safe copy of your application so if anything goes wrong you can roll-back to the previous version.