【问题标题】:How to remove application from recent apps in Objective C IOS [duplicate]如何在Objective C IOS中从最近的应用程序中删除应用程序[重复]
【发布时间】:2020-02-29 14:31:32
【问题描述】:

我是 IOS 开发新手 我想从最近用 Objective C 开发的应用程序中删除我的应用程序。 我在

中尝试了 UIApplicationExitsOnSuspend

info.plist

,但在 info.plist 中仍然没有显示应用程序。 谁可以帮我这个事。 提前致谢!!!

【问题讨论】:

  • 对不起... what 你想通过 what 做什么?
  • 从最近的应用程序中删除应用程序。我在 info.plist 中尝试了 UIApplicationExitsOnSuspend true
  • 你不能。即使仍然支持UIApplicationExitsOnSuspend,您的应用程序的快照仍然会出现在应用程序切换器中,您的应用程序不会处于暂停状态。也许您可以解释为什么要从应用切换器中删除该应用,我们可以建议一种替代方法。
  • 我从我的安全团队收到了这个问题 "Backgrounding Screenshots Enabled 默认情况下,当 iOS 应用程序被发送到后台时(例如通过按下 Home 按钮),操作系统将截取当前 UI 并将其存储以供将来使用。 应用程序没有禁用此功能,因此可以将包含电子邮件地址和手机号码的屏幕截图写入设备文件系统。”

标签: ios objective-c


【解决方案1】:

您可以使用封面窗口的概念。
当应用程序退出活动状态时,您会显示您的封面,系统将拍摄该封面的快照,而不是最后一个可见的 UIViewController。 当应用程序变为活动状态时,您将隐藏并取消分配您的封面窗口。 这是示例

#import "AppDelegate.h"

@interface AppDelegate ()

@property (nonatomic) UIWindow *coverWindow;

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    self.coverWindow = UIWindow.new;
    self.coverWindow.rootViewController = UIViewController.new;
    [self.coverWindow makeKeyAndVisible];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [self.coverWindow removeFromSuperview];
    self.coverWindow = nil;
}

@end

【讨论】:

    【解决方案2】:

    UIApplicationExitsOnSuspendis deprecated。你不应该再使用它了。有报道称苹果拒绝使用该密钥的应用程序。根据苹果:

    已弃用

    系统现在会自动挂起离开前台的应用程序 他们不需要后台执行。有关详细信息,请参阅 About the Background Execution Sequence.

    所以现在,您只能让苹果处理应用程序的后台状态。以任何方式强行退出应用都会导致 App Store 被拒绝。

    更新

    我刚刚注意到你的评论说你真正想要什么。要防止背景快照,您可以向窗口添加自定义视图。这类似于下面 Mark Agranal 发布的答案,但问题是您不需要添加新的 Window 或新的 ViewController。您可以简单地向窗口添加自定义视图,并在应用重新进入活动状态时删除该视图。在您的 AppDelegate 中:

    // The view to use as a mask
    @property (nonatomic, weak) UIView* coverView;
    
    // Add the view to window
    -(void)applicationWillResignActive:(UIApplication *)application
    {
        coverView = [[UIView alloc]initWithFrame:[self.window frame]];
        [self.window addSubview:coverView];
    }
    
    // Remove the view to window
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        if(coverView != nil) {
            [coverView removeFromSuperview];
            coverView = nil;
        }
    }
    

    请注意,您可以使用上述方法将任何视图添加到窗口。系统将对添加的视图进行截图,因此敏感的用户数据将受到保护。

    【讨论】:

    • 那么我们如何实现这个概念
    • 目前还没有实现这个概念。 Apple 严格遵守其政策(至少对第三方开发商而言)。这是从 Android 转向 iOS 的主要区别。你的手基本上被绑在很多不同的地方。您在 Android 中所做的一切都无法在 iOS 中完成。 :)
    • @Pinki 请查看更新后的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 2014-04-05
    • 2012-11-03
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多