iOS小技能:应用程序初识

232 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情

引言

什么是image:

  1. Executable: 应用的主要二进制(比如.o文件)
  2. Dylib: 动态链接库(dynamic library,又称 DSO 或 DLL)
  3. Bundle: 资源文件,不能被链接的 Dylib,只能在运行时使用 dlopen() 加载

I UIApplication(应用程序的象征)

1.1 UIApplication

每一个应用都有自己的UIApplication对象,而且是单例的;

[UIApplication sharedApplication]

1、一个iOS程序启动后创建的第一个对象,就是UIApplication对象 2、利用UIApplication对象可以进行一些应用级的操作

1.2 UIApplication的常用属性

@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible __TVOS_PROHIBITED; // showing network spinning gear in status bar. default is NO 设置联网指示器的可见行
 
@property(nonatomic) NSInteger applicationIconBadgeNumber __TVOS_PROHIBITED;  // set to 0 to hide. default is 0. In iOS 8.0 and later, your application must register for user notifications using -[UIApplication registerUserNotificationSettings:] before being able to set the icon badge.设置应用程序图标右上角的红色提醒数字

1.3 openURL :

- (BOOL)openURL:(NSURL*)url NS_EXTENSION_UNAVAILABLE_IOS("");//url    A URL (Universal Resource Locator). UIKit supports many common schemes, including the http, https, tel, facetime, and mailto schemes. You can also employ custom URL schemes associated with apps installed on the device.
//打电话
UIApplication *app= [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];
//发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];
//发邮件
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];
//打开一个网页资源
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
  • 打开自己app的系统设置界面
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]){
                                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
                            }

应用场景:iOS权限检测指南【定位权限、相机权限、蓝牙权限】(检查是否开启定位权限,并可控制是否引导开启权限: iPhone的\“设置-隐私-定位\“中允许访问地理位置)

———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/z929118967/…

1.4 打开任意app的设置界面

  • 利用运行时API打开任意app的设置界面(注意上架appstore有风险)
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    Class aClass = NSClassFromString(@"LSApplicationWorkspace");
    
   id defaultWorkspace =   [aClass performSelector:@selector(defaultWorkspace)];
    
    [defaultWorkspace openURL:[NSURL URLWithString:@"app-prefs:com.tencent.xin"]];

    
    

    
}


II UIApplication和delegate

UIApplication、AppDelagate、UIWindow、UIViewController的关系

这里写图片描述

在app受到干挠(来电、锁屏)时,会产生些系统事件,让delegate处理这些系统事件 1、delegate 可处理的事件 1》应用程序的生命周期(程序启动、关闭): 处理苹果服务器推送的消息。 2》系统事件(来电) 3》内存警告

III 状态栏的2种管理方式

  • 通过UIViewController(每一个UIViewController都可以拥有自己不同的状态栏)
  • UIApplication管理(一个应用程序的状态栏都由它统一管理)

3.1 默认情况下,状态栏都是由UIViewController管理

- (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to NO
// Override to return the type of animation that should be used for status bar changes for this view controller. This currently only affects changes to prefersStatusBarHidden. 状态栏的可见性
1.VC中重写
-(UIStatusBarStyle)preferredStatusBarStyle
2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];
 
但是:当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。
原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,只会调用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不会被调用。
 
解决方法:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
或者
定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:

3.2 利用UIApplication管理状态栏

要修改info.plist的viewController based status bar appearance 属性

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

1、在info.plist中,将View controller-based status bar appearance设为NO. 2、在app delegate中:[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

see also

🍅 联系作者: iOS逆向(公号:iosrev)


🍅 作者简介:CSDN 博客专家认证🏆丨全站 Top 50、华为云云享专家认证🏆、iOS逆向公号号主


🍅 简历模板、技术互助。关注我,都给你。