iPhone에서 처음 앱 실행을 감지하는 방법
처음 시작할 때 어떻게 감지할 수 있습니까?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// if very first launch than perform actionA
// else perform actionB
}
방법?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
Swift 3, 4에서 다음을 시도합니다.
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = UserDefaults.standard
if defaults.bool(forKey: "isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
스위프트 2에서 이것을 시도해 보세요.
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.boolForKey("isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
업데이트:- OBJ-C의 경우,
+ (BOOL)isAppAlreadyLaunchedOnce {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
}
OBJ-C에 대한 참조: https://stackoverflow.com/a/9964400/3411787
바로 이 목적을 위해 작은 도서관을 썼습니다.이 옵션을 사용하면 처음 시작하는 것인지 아니면 이 버전만 시작하는 것인지, 사용자가 설치한 이전 버전을 알 수 있습니다.그것은 아파치 2 라이선스 하에 코코팟으로 github에서 이용할 수 있습니다: GBVersionTracking.
그이불러요걸냥▁this불로 요.application:didFinishLaunching:withOptions:
[GBVersionTracking track];
그리고 첫 출시인지 확인하려면 어디서든 전화하십시오.
[GBVersionTracking isFirstLaunchEver];
마찬가지로:
[GBVersionTracking isFirstLaunchForVersion];
[GBVersionTracking currentVersion];
[GBVersionTracking previousVersion];
[GBVersionTracking versionHistory];
스위프트 3.0용 - 스위프트 5
확장자를 추가
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !UserDefaults.standard.bool(forKey: "hasBeenLaunchedBeforeFlag") {
UserDefaults.standard.set(true, forKey: "hasBeenLaunchedBeforeFlag")
UserDefaults.standard.synchronize()
return true
}
return false
}
}
그렇다면 당신의 코드로.
UIApplication.isFirstLaunch()
Xcode 7과 Swift 2.0의 또 다른 아이디어는 확장 기능을 사용하는 것입니다.
extension NSUserDefaults {
func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
이제 앱의 어디에나 쓸 수 있습니다.
if NSUserDefaults.standardUserDefaults().isFirstLaunch() {
// do something on first launch
}
저는 개인적으로 다음과 같은 UIA 애플리케이션 확장을 선호합니다.
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
함수 호출이 더 설명적이기 때문입니다.
if UIApplication.isFirstLaunch() {
// do something on first launch
}
아래의 정적 방법으로 구현할 수 있습니다.
+ (BOOL)isFirstTime{
static BOOL flag=NO;
static BOOL result;
if(!flag){
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hasLaunchedOnce"]){
result=NO;
}else{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
result=YES;
}
flag=YES;
}
return result;
}
시작할 때 저장한 다음 해당 항목이 있는지 확인해야 합니다.그렇지 않다면, 그것은 처음입니다."Something"은 파일, 데이터베이스 항목, 사용자 기본값의 설정일 수 있습니다.
이 작업은 매우 간단하며 6줄의 코드만 있으면 됩니다.
응용프로그램 시작 환경설정 또는 응용프로그램이 처음 실행되었는지 여부를 테스트해야 하는 다른 곳에 이 코드를 추가하는 것이 유용합니다.
//These next six lines of code are the only ones required! The rest is just running code when it's the first time.
//Declare an integer and a default.
NSUserDefaults *theDefaults;
int launchCount;
//Set up the properties for the integer and default.
theDefaults = [NSUserDefaults standardUserDefaults];
launchCount = [theDefaults integerForKey:@"hasRun"] + 1;
[theDefaults setInteger:launchCount forKey:@"hasRun"];
[theDefaults synchronize];
//Log the amount of times the application has been run
NSLog(@"This application has been run %d amount of times", launchCount);
//Test if application is the first time running
if(launchCount == 1) {
//Run your first launch code (Bring user to info/setup screen, etc.)
NSLog(@"This is the first time this application has been run";
}
//Test if it has been run before
if(launchCount >= 2) {
//Run new code if they have opened the app before (Bring user to home screen etc.
NSLog(@"This application has been run before);
}
추신: 기본 설정에 bool을 사용하지 마십시오. 정수만 사용하십시오.정의되지 않은 경우 기본값은 0입니다.
고또리그.[theDefaults synchronize];라인이 필요하지는 않지만 수백 개의 장치에서 앱을 수백 번 실행할 때 결과가 항상 신뢰할 수 있는 것은 아니며, 게다가 더 나은 방법을 사용하는 것이 좋습니다.
NSUserDefaults에 bool 키 저장처음이 아니게 되면 앱을 삭제하거나 다시 설치할 때까지 yes로 변경하고 그렇게 유지합니다.
빠르고 쉬운 기능
- (BOOL) isFirstTimeOpening {
NSUserDefaults *theDefaults = [NSUserDefaults standardUserDefaults];
if([theDefaults integerForKey:@"hasRun"] == 0) {
[theDefaults setInteger:1 forKey:@"hasRun"];
[theDefaults synchronize];
return true;
}
return false;
}
Xcode 7의 Swift 2.0용.AppDelegate.swift 파일에서 다음을 수행합니다.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
{
return true
}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
didFinishLaunchingOnce()
return true
}
func didFinishLaunchingOnce() -> Bool
{
let defaults = NSUserDefaults.standardUserDefaults()
if let hasBeenLauncherBefore = defaults.stringForKey("hasAppBeenLaunchedBefore")
{
//print(" N-th time app launched ")
return true
}
else
{
//print(" First time app launched ")
defaults.setBool(true, forKey: "hasAppBeenLaunchedBefore")
return false
}
}
}
신속하게 앱 대리인 위와 같은 범위 밖에서 매우 쉽게 수행할 수 있는 글로벌 상수를 사용할 것을 제안합니다.따라서 앱이 종료되지 않는 한 올바른 값으로 설정됩니다.앱이 백그라운드로 이동하는 경우에도 동일한 값을 반환합니다.앱이 완전히 다시 시작된 경우에만 값이 변경됩니다.
let isFirstLaunch: Bool = {
if !UserDefaults.standard.bool(forKey: "hasBeenLaunchedBeforeFlag") {
UserDefaults.standard.set(true, forKey: "hasBeenLaunchedBeforeFlag")
UserDefaults.standard.synchronize()
return true
}
return false
}()
하지만 솔직히 앱이 백그라운드로 한 번쯤 전송되었다는 사실을 추적하는 것이 좋습니다.이러한 경우에는 UIApplication에서 확장을 사용하고 applicationDidEnterBackground 메서드에서 다음과 같이 플래그를 설정하는 것을 선호합니다.
extension UIApplication {
private static let isFirstLaunchKey = "isFirstLaunchKey"
static var isFirstLaunch: Bool {
return !UserDefaults.standard.bool(forKey: isFirstLaunchKey)
}
static func didEnterBackground() {
if isFirstLaunch {
UserDefaults.standard.set(true, forKey: isFirstLaunchKey)
UserDefaults.standard.synchronize()
}
}
}
앱 대리인 또는 장면 대리인에게
func sceneDidEnterBackground(_ scene: UIScene) {
UIApplication.didEnterBackground()
}
XCode 12, Swift 5에 대해 업데이트됨
extension UIApplication {
func isFirstLaunch() -> Bool {
if !UserDefaults.standard.bool(forKey: "HasLaunched") {
UserDefaults.standard.set(true, forKey: "HasLaunched")
UserDefaults.standard.synchronize()
return true
}
return false
}
}
그럼 당신은 그것을 다음과(와)
UIApplication.isFirstLaunch()
재빠른
struct Pref {
static let keyFirstRun = "PrefFirstRun"
static var isFirstRun: Bool {
get {
return UserDefaults.standard.bool(forKey: keyFirstRun)
}
set {
UserDefaults.standard.set(newValue, forKey: keyFirstRun)
}
}
}
앱 실행 시 기본값 등록:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let prefs: [String:Any] = [
Pref.keyFirstRun: true
...
]
UserDefaults.standard.register(defaults: prefs)
앱 종료 시 값 지우기:
func applicationWillTerminate(_ application: UIApplication) {
Pref.isFirstRun = false
체크 값:
if Pref.isFirstRun {
... do whatever
스위프트 5 iOS 13.
저는 크리스 프렘겐의 빠르고 쉬운 것을 좋아합니다.그래서 업데이트를 했습니다.
func isFirstTimeOpening() -> Bool {
let defaults = UserDefaults.standard
if(defaults.integer(forKey: "hasRun") == 0) {
defaults.set(1, forKey: "hasRun")
return true
}
return false
}
NSUser 기본값 + 매크로
가장 좋은 접근 방식은 다음을 사용하는 것입니다.NSUserDefaults그리고 저장 a.BOOL변수.위에서 언급한 바와 같이, 다음 코드로 충분합니다.
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSNumber numberWithBool:true] forKey:@"~applicationHasLaunchedBefore"];
[userDefaults synchronize];
또한 아래와 같이 매크로를 생성하여 첫 실행 여부를 쉽게 확인할 수 있습니다.
#define kApplicationHasLaunchedBefore [[NSUserDefaults standardUserDefaults] objectForKey:@"~applicationHasLaunchedBefore"]
그럼 그렇게 사용하세요.
if (kApplicationHasLaunchedBefore) {
//App has previously launched
} else {
//App has not previously launched
}
다음은 swift 5.0에서 작동하는 답변입니다.@ZaidPathan의 답변에 비해 개선된 점은 숨겨진 계약이 없다는 것입니다.전화하지 않으면setFirstAppLaunch()전화하기 바로 전에 한 번isFirstAppLaunch()어설션 오류가 발생합니다(디버깅 모드에서만).
fileprivate struct _firstAppLaunchStaticData {
static var alreadyCalled = false
static var isFirstAppLaunch = true
static let appAlreadyLaunchedString = "__private__appAlreadyLaunchedOnce"
}
func setFirstAppLaunch() {
assert(_firstAppLaunchStaticData.alreadyCalled == false, "[Error] You called setFirstAppLaunch more than once")
_firstAppLaunchStaticData.alreadyCalled = true
let defaults = UserDefaults.standard
if defaults.string(forKey: _firstAppLaunchStaticData.appAlreadyLaunchedString) != nil {
_firstAppLaunchStaticData.isFirstAppLaunch = false
}
defaults.set(true, forKey: _firstAppLaunchStaticData.appAlreadyLaunchedString)
}
func isFirstAppLaunch() -> Bool {
assert(_firstAppLaunchStaticData.alreadyCalled == true, "[Error] Function setFirstAppLaunch wasn't called")
return _firstAppLaunchStaticData.isFirstAppLaunch
}
그럼 함수를 호출하면 됩니다.setFirstAppLaunch()당신의 지원을 시작할 때 그리고.isFirstAppLaunch()언제든지 앱이 호출되었는지 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/9964371/how-to-detect-first-time-app-launch-on-an-iphone
'programing' 카테고리의 다른 글
| Mongo에서 사용되지 않는 필드를 제거하는 방법은 무엇입니까? (0) | 2023.06.03 |
|---|---|
| 해시를 예쁘게 인쇄하는 가장 좋은 방법 (0) | 2023.06.03 |
| Linux에서 WPF가 이미 가능합니까? (0) | 2023.06.03 |
| VB.NET에서 자체 서명된 TLS/SSL 인증서 수락 (0) | 2023.06.03 |
| SimpleNamespace와 빈 클래스 정의의 차이점은 무엇입니까? (0) | 2023.06.03 |