Change an iOS app after appstore launch - iphone

Are there any libraries or services for iOS to change a live (in the appstore) iPhone app UI?
The only way I can see it working now is to use a web view, but I would rather have a native solution.

Apparently you can control the UI style by using CSS properties (like styling a web page). If you design your app with this approach, then you could store that CSS file on a server. When the app launches, you can tell it to read the CSS file from the server and style it's interface accordingly. Thus if you made any changes in the CSS file, those changes would be reflected in the UI when the app is launched again.
Here's a link explaining the CSS approach to style buttons, tables, etc..
see the webpage: NUI for iOS - Cocoa Controls

If you could be more specific on "change" you can do anything you want if you're pulling data from a server or website. You'll only need to update the website, have the app ask for the data or an update, and the app will receive the new data.

What i have done for some of my public and non public applications is to host a plist file on an amazon s3 server, very cost effective, even better if you have your own web server. I will then parse that plist and have set up an architecture in my applications which will build the interface depending on the instructions for the plist. As a simple example, lets say you want to decide on your application background color via a web pull. You can have a dictionary in the plist file which will store 4 values with the keys backgroundR, backgroundB, backgroundG, backgroundA (RGB value and alpha). You can then parse the plist file and fill a UIColor with the rgb and alpha values and set it as the background color. Don't forget to have built in default values in case the file can not be reached.

I agree with Gavin you can use CSS Styling tools like NUI, or the more polished nativeCSS to change the appearance of a native app after it's been released.
I've had nativeCSS apps through the app store and operate in this way. This doesn't really provide a functional change to the app, but allows areas to be unlocked when they are ready.

Related

share data between two separated applications in iPhone

I'm developing two separated applications but there is a plist file for one of those app contains data that I need it on the other one.
is there is any way to get data? in case yes please show me some sample code? what about the NSUserDefault could it be useful?
NSUserDefault will not work. You need to create a custom URL scheme for your app and then you will be able to pass some data to your another app.
follow these url's you will find what you want.
http://www.tutoplanet.com/android-tutorials/ios-sdk-working-with-url-schemes/
http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
NSUserDefaults will not help you at all. Your applications are each sandboxed separately and have access to very little other than their own data.
You can, however, open a file from one app in another. You can see more about that here.
Other Resources
Apple Approved iPhone Inter-process Communication
2-way app integration on the iPhone: How it works

Is this allowed in App Store?

I am making an app for some people and they want to instantly update the app whenever they want after first submission. The changes will be like color, fonts, background color, removing a tab from tabbar...
What I was thinking was, creating a plist with entries like color, font and etc for specific views. And everytime an app starts up, it connects to a server and download the plist (if it's updated) and then load it's views according to the plist.
So for example, say the user wants to change the font from Helvetica to Arial. In plist I would have a dictionary with key named "Font" and object is the font name...So I simply update the plist with the font name "Arial" now and next time the app starts up, the font will change.
I hope I made it clear what I am trying to do. Now my question is, is this kind of thing allowed in app store? In reality, I am trying to circumvent the update system of App Store, but just wondering if it's allowed or if someone had experience doing this.
Thanks.
Your app is allowed to do these kinds of things, but be careful that your clients don't get the wrong set of expectations. The review process is not there to stifle creativity and color changes, but to prevent malicious code from running. You're not circumventing anything by using a web server to control the appearance of your app. Consider many apps which take content from the internet. You are merely taking it a step further.
The iTunes App and the App Store app have recently added a "Purchased" view without any user having to download anything new. You should be fine doing the same.
Yes, downloading content is ok. Downloading code however is not. So if the changes are due to different content you should be fine.
While nobody really knows until Apple says yea or nay, there are a few assumptions I believe to be safe:
1) If you're updating executable code (complied binary or a scripting language) you will not be accepted, and if you make it in somehow they'll yank the app and kick you off when they find out.
2) If you're updating resources (content, colors, fonts, etc.) you are probably fine, but Apple may decide to reject you anyway. Have a good case to defend yourself with if that happens.
All those changes are ok with Apple and can be performed dynamically in response to an external trigger (eg. api).
You can do whatever you want as long as you don't attempt to download and run additional code. (if you don't know what his means then you're fine). :)

Pass image from an email to image viewer in Xcode

We have an iPhone app that can display an image dataset and pass it to an UIImageviewer - however we could do with a rough pointer. If the user was sent the dataset (image) via email as an attachment how could we pass that onto the app to be displayed. These are not regular jpeg/png/bmp images - more datasets which need to go through / use a set of libraries to be displayed.
You can launch an application if that application registers its own URL scheme. However, I'm not sure how you would embed your own scheme into an email attachment.
http://mobileorchard.com/apple-approved-iphone-inter-process-communication/
http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
On a related note, I've noticed that you have been asking a lot of questions regarding DICOMs and iOS devices, trying to develop your own app, because you have a particular (email-centric) workflow not supported by existing PACS. It seems like you've already developed your own app, so congratulations are in order. If at any time, you decide that it may be more trouble than its worth, feel free to check out ours.
http://nephosct.com
Currently we bootstrap off of OsiriX as our server, but that should be fixed when we release a platform independent version (hopefully within a week). We would also be happy to work with you to add features to the app so that it supports your daily workflow.

Iphone App changes that require re-submittal

I am doing an app with both static and changing information/graphics. The logo and purpose stay the same, but the graphics and text will change continuously on 1 skin. Does that matter at all? Feel free to just point me to a link that explains this better. I haven't been able to find it in the iphone devel. guide thus far.
You cannot change the name, icon, default images, or any executable or interpreted code (other than Javascript run in a UIWebView) in an iOS app without re-submittal. If you want to change any of the above, you will need to (re)submit the app to Apple.
You cannot change the keywords or screenshots used by the App store, but you can update the text description of an app in the App store without resubmitting the app.
But an app can download and change almost all other content in an app, including text, databases, button labels, colors, images, sounds, UI coordinates, Javascript, etc. There's even an Apple WWDC 2010 video on this data driven app design methodology. You can also add certain badges to an app's icon at run-time. Note that if you aren't filtering certain data/web downloads, your app may get/require an Adult rating.
As long as you are using Public APIs, it does not matter where you pull content from. I would recommend having fall-back graphics in your bundle that can be loaded if the external stuff cannot be found. Other than that, the content is up to you Apple is only trying to make sure the application itself is functional using publicly-available APIs.

A caching solution for iPhone application

What I'm building is simply an application that fetches data over the web and displays them on the iOS views. Data are text and, sometimes, images / music files / movies.
I'd like to use some caching solution for the media. What it needs to do is:
get an url of the file
check if it's alredy downloaded in the cache storage, if it is, serve it
if not, download it
while also checking how much of the storage the current cache uses, and, if it's over the quota, delete oldest files
Best would be to have a simple interface for this - so I can just give an url and get the file of it (while files can change over time and reside on the same URL, so this should be handled too, in a perfect case).
Anyone knows a library to do it, on iPhone/iPad application?
ASIHttpRequest has a DownloadCache option that may work for you. From their documentation:
* You want to have access to the data when there is no internet connection and you can't download it again
* You want to download something only if it has changed since you last downloaded it
* The content you are working with will never change, so you only want to download it once
This is what I used in my iPad app and it works pretty well.
You could try looking at using a UIWebview for the view. If I am understanding this correctly, you will be hosting your content on a web server and would simply like the iOS device to pull the content from the URL. This is what UIWebview is. It is essentially programmable access to Safari.