Temporary Disclaimer - ios

I'm making an app as a part of my project and I've been asked to add a disclaimer.
At first I made a separate view with a textview that holds the disclaimer, when the user presses the Disclaimer button they will see this.
But I've been asked to change this so that the disclaimer is shown if the app is being used for the first time. If the user accepts it, they won't see it again and if they don't they'll see it every time they open the app.
I don't know how to go about this. I tried changing it so that the first thing the app shows when launched is the disclaimer, but that got annoying because every time I launch the app it goes to the disclaimer.
Anyone have any suggestions or examples ?

You can use NSUserDefaults to achieve this. Once the user has accepted the disclaimer, write a BOOL called disclaimerAccepted (or similar) to your defaults. Use the following code in the AppDelegate method application:didFinishLaunchingWithOptions: to check this:
if (![[NSUserDefaults standardUserDefaults] boolForKey:#"disclaimerAccepted"]) {
// Show the disclaimer.
}
And use this code when the user accepts the disclaimer:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:#"disclaimerAccepted"];
[defaults synchronize];
Hope this is helpful.

Why not use NSUserDefaults to store info whether user dismissed or accepted the disclaimer & show the dialog accordingly. NSUserDefaults are persisted even if app is closed.
edit:
Here is an example Using User Defaults

The best solution I found is given here: iPhone: How do I detect when an app is launched for the first time?
If you like it add your upvote there - I only just used it a couple of days ago and I think it is really good!

Related

How do I determine that my app was just downloaded from AppStore the first time?

This is how it is accomplished in my app:
I keep the data in iCloud.
I need to do some time consuming thing for users who already used my app. But this will also start for completely new users... they just downloaded my app from AppStore for the first time. And this is not expected.
How can I determine that the app is running, but downloaded from AppStore for the first time?
What I could do, but I did not:
put any boolean data in the Keychain, and then check if it exists.
Since you have no non-app end to distinguish users Keychain as you mentioned is your only app persistance option that will survive app uninstalling. Only device Reset to factory settings would remove it.
you can use NSUserDefaults . if appDelegate.m ->didFinishLaunchingWithOptions use this code :
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
if([userDefaults objectForKey:#"first_time"] == nil){
[userDefaults setObject:#"1" forKey:#"first_time"];
//do whatever you need
}
this condition will satisfied only once after installation .

iOS SDK Detect if app was updated or a new install

After looking at a bunch of SO posts about detecting if this is a fresh install or not, I'm assuming what I want to do is impossible, but I'm going to ask just in case there's a trick I'm unsure of.
I am building an SDK to be integrated into apps, and I want to be able to tell when the SDK gets initialized for the very first time if it's from a brand new install, or from an app update which included our SDK.
I could have the integrator to call something like [MySDK initializeIsNewInstall:YES/NO] and force them to figure out which it is (using NSDefaults or whatever), but I'd rather be able to figure it out automatically somehow.
If anyone has any ideas, that would be great.
I would like to suggest pretty good trick by using [NSUserDefaults standardUserDefaults]
do it like this,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if([[NSUserDefaults standardUserDefaults] boolForKey:#"isApplicationUpdated"]){
// application was updated//
// make another userDefaults to store version number and confirm if it is updated here.
}
else{
[[NSUserDefaults standardUserDefaults] setBookForKey:#"isApplicationUpdated"]
// as for the first time application would not find this key and you can use it after you have updated the app do stuff here
}
Afaik the only way to detect whether your app was updated or freshly installed in your case is to check your persistence for something that should be there from a previous version. For future checks you can add your own flag to your persistence.

Settings.bundle: how should application recognize the fact that a value got changed outside of app? [duplicate]

This question already has answers here:
How to determine when Settings change on iOS
(7 answers)
How to receive NSUserDefaultsDidChangeNotification iphone
(1 answer)
Closed 9 years ago.
I am using Settings bundle to configure my app. As a side effect, the same set of settings is available outside the app in iOS Settings. This is great. However there is a little problem - I do need to react to the changes. For example, I have a name that a user is using to be recognized by others and if it changes, a server call must happen. How to handle that?
EDIT: take it easy, fellas. I've never done that before and it's hard to read thru all guidelines available. Settings.bundle is not an obvious thing to deal with. Anyways, feel free to vote the question down but at least take a minute and read thru all commends before you do so.
Tried a couple suggested ways, i.e. using notifications and in more direct manipulation of defaults when app becomes active. The second approach worked better because it only executed at times I expect instead of every time any config setting is changed/added/deleted within the app.
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSString *nameOld = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *nameNew = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];
You should check for changes to settings in this appDelegate method.
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Check for any changes to settings
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
bool userICloudChoice = [userDefaults boolForKey:_cloudPreferenceKey];
}

App First Run implementation

I would like to implement certain activities like Display the Help / tutorials slide show, what is new slide show and download some files and database for the use by the app during the first run after installing the app on the device. Also make some language and other settings. Is there a method in iOS to do this are there some example or tutorials known to any of you who can share it for me.
You can use NSUserDefault to keep track of first launch.
Here is the sample code:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
BOOL firstLaunch = [userDefaults boolForKey:<firstLaunchKey>];
if (firstLaunch) {
<present Help, tip etc.>
[userDefaults setBool:NO forKey:<firstLaunchKey>];
}
Some basic ios app tutorials:
http://www.creativebloq.com/app-design/how-build-app-tutorials-12121473
Database -> How is an iPhone database created for the first time?
Slideshow->
Three20: https://github.com/facebook/three20
and
Apple's UICatalog https://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html
Some Simple code sample for iOS Content storage, sync, management:
http://quickblox.com/developers/SimpleSample-content-ios

Button stays hidden after app closes

When my application loads up, it acts as an installer. When you tap the "Install" button, the application does it's task. It installs what is needed, and then you can carry on throughout using the app. My app is working fine, but whenever I close out the app of the multitasking bar, the app loads like the original installer again. Thus, the user having to keep reinstalling every time the app is loaded again. I want the user to only have to install the items once, be able to close the app, then use the content again without having to re-download. I know that I will be needing to use NSUserDefaults for this, but I also want the "Install" button to permanently disappear along with the installer. NOTE THIS IS NOT A STORE. This is just a test app for installing content that I may use further down the road. How would I be able to do all of this? Any help is appreciated. Thanks!
Having implemented something like this a few times, it's best to detect first launch, and show the installer screen based on that. However, there are cases where the user doesn't quite finish installation, and the app is somehow backgrounder or killed. In which case, you need to store another variable that records whether the user has completed the install.
The simplest way is to present a modal view controller as a sort of wizard if setup isn't initially completed, and just load the main screen as usual if it is.
Just query user defaults before you install. If it comes up not installed, then install whatever is needed and then set the user defaults!
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *isInstalled = [defaults objectForKey:#"installed"];
if( ![isInstalled isEqualToString: #"true"] ) {
//do installation here
NSString *hasUserInstalled = #"true";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:hasUserInstalled forKey:#"installed"];
[defaults synchronize];
}

Resources