iOS

homebrew简介和安装

homebrew简介
Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
homebrew 安装命令
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
homebrew卸载
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" 或者使用下面命令
$ cd `brew --prefix`
$ rm -rf Cellar
$ brew prune
$ rm `git ls-files`
$ rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
$ rm -rf .git
$ rm -rf ~/Library/Caches/Homebrew
homebrew常用命令
安装软件,如:brew install packageName
卸载软件,如:brew uninstall packageName
搜索软件,如:brew search packageName
更新软件,如:brew upgrade packageName
查看安装列表, 如:brew list
更新Homebrew,如:brew update
在Mac OS X 10.11系统以后,/usr/local/等系统目录下的文件读写是需要系统root权限的,以往的Homebrew安装如果没有指定安装路径,会默认安装在这些需要系统root用户读写权限的目录下,导致有些指令需要添加sudo前缀来执行,比如升级Homebrew需要:
`sudo brew update`
更多参考地址
时间是一切财富中最宝贵的财富。 —— 德奥弗拉斯多"
(更多…)

By iOS收藏家, ago
iOS

Xcode9.2 编译在iOS8.1 以下版本图片显示异常

bug

问题排查

前一段时间看到运营反馈了一个图片显示成这样的问题,我们开发看了之后也是一脸的懵(bi)啊。因为之前修改需求并没有这个地方的需求变更,而且我们在自己的开发测试机上都是没有出现类似的问题。 我们联系了一下出现这个问题的用户,问清楚了手机的系统版本和我们app的版本。我们用同样的app版本在其他手机上运行都没有这样的问题,然后猜测是iOS系统的版本。 我们运行在8.1系统的模拟机上然后就看到了上面一副图。在iOS8.1系统上App的图片变的扭曲了,但同事运行在iOS8.1上却没有出现这样的问题,排除了是手机iOS8.1版本的问题。 然后我就开始怀疑是Xcode版本的问题,在网上搜索了一遍,确定了是Xcode9.2版本的问题,而且好多朋友都遇到了。 (更多…)

By iOS收藏家, ago
iOS

Hexo 常用命令

hexo ⚠️

npm install hexo -g #安装  
npm update hexo -g #升级  
hexo init #初始化

简写 ⚠️

hexo n "我的博客" == hexo new "我的博客" #新建文章
hexo p == hexo publish
hexo g == hexo generate#生成
hexo s == hexo server #启动服务预览
hexo d == hexo deploy#部署

服务器

hexo server #Hexo 会监视文件变动并自动更新,您无须重启服务器。
hexo server -s #静态模式
hexo server -p 5000 #更改端口
hexo server -i 192.168.1.1 #自定义 IP

hexo clean #清除缓存 网页正常情况下可以忽略此条命令
hexo g #生成静态网页
hexo d #开始部署
监视文件变动
hexo generate #使用 Hexo 生成静态文件快速而且简单
hexo generate --watch #监视文件变动

完成后部署

两个命令的作用是相同的
hexo generate --deploy
hexo deploy --generate

hexo deploy -g
hexo server -g

草稿

hexo publish [layout] <title>

模版

hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
hexo generate #生成静态页面至public目录
hexo server #开启预览访问端口(默认端口4000,'ctrl + c'关闭server)
hexo deploy #将.deploy目录部署到GitHub

hexo new [layout] <title>
hexo new photo "My Gallery"
hexo new "Hello World" --lang tw
变量 描述
layout 布局
title 标题
date 文件建立日期
title 使用Hexo搭建个人博客
layout: post
date: 2014-03-03 19:07:43
comments: true
categories: Blog
tags: [Hexo]
keywords: Hexo, Blog
description: 生命在于折腾,又把博客折腾到Hexo了。给Hexo点赞。

模版(Scaffold)

hexo new photo "My Gallery"

设置文章摘要 ⚠️

添加<!--more-->在这以下都是宇文 以上是文章摘要 (更多…)

By iOS收藏家, ago
iOS

OC代码规范

命名

Preferred :
UIColor *myColor = [UIColor whiteColor];
Not Preferred :
UIColor *myColour = [UIColor whiteColor];

代码组织

使用#pragma mark - 将生命周期、分类方法和代理方法分块标注管理
#pragma mark - Lifecycle

- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value {}
- (id)customProperty {}

#pragma mark - IBActions

- (IBAction)submitData:(id)sender {}

#pragma mark - Public

- (void)publicMethod {}

#pragma mark - Private

- (void)privateMethod {}

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

#pragma mark -  lazy

空格

  • 使用2个空格不要使用Tab键
  • 方法和其他后的大括弧在第一行开始在新的一行结束。 Preferred:
if (user.isHappy) {
  //Do something
} else {
  //Do something else
}
Not Preferred:
if (user.isHappy)
{
    //Do something
}
else {
    //Do something else
}
  • 在方法中的参数中间添加一个空格方便阅读。
  • 优先使用自动生成,但是如果需要的话可以在实现文件中添加@ synthesize 和 @dynamic。
  • 调用方法时尽量避免方法中冒号对齐。当方法中包含3个以上的参数,使用冒号对齐会增加方法的可读性。但是,当方法中包含block时Xcode 的自动对齐会让代码看起来不容易分辨。 Preferred:
// blocks are easily readable
[UIView animateWithDuration:1.0 animations:^{
  // something
} completion:^(BOOL finished) {
  // something
}];
Not Preferred:
// colon-aligning makes the block indentation hard to read
[UIView animateWithDuration:1.0
                 animations:^{
                     // something
                 }
                 completion:^(BOOL finished) {
                     // something
                 }];
(更多…)

By iOS收藏家, ago
iOS

iOS项目代码混淆基本处理

1、首先准备两个文件: 方法列表文件func.list 和 混淆脚本文件confuse.sh (最后有代码)

先看一下文件的头文件方法列表 BasicViewController头文件方法列表.png func.list 中添加要混淆的方法名称 在此演示添加popNavigationController方法 func添加的方法.png

2、将两个文件都放入到工程中,如图:

添加文件.png

3、修改工程Build Phases配置运行脚本

工程配置.png

4、编译程序,可以看到混淆原来的方法名和混淆后的方法名,如图效果

编译log.png

5、然后用class-dump来看一下混淆前和混淆后的结果

混淆结果对比.png (更多…)

By iOS收藏家, ago
iOS

iOS宏定义和宏方法

宏定义和宏方法

定义机型

#define is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define is_iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

定义手机系统型号

#define kOSVersion [[UIDevice currentDevice].systemVersion floatValue]
#define kOS_iOS7 (OSVersion >= 7)
#define kOS_iOS8 (OSVersion >= 8)
#define kOS_iOS9 (OSVersion >= 9)

宏定义屏幕宽度和高度

#define KScreenSize    [UIScreen mainScreen].bounds.size   
#define KScreenHeight  ([[UIScreen mainScreen] bounds].size.height)
#define KScreenWidth   ([[UIScreen mainScreen] bounds].size.width)

定义打印的东西

#define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

通过RGB获得一个颜色

static inline UIColor * getBackGoundColor(CGFloat r,CGFloat g,CGFloat b,CGFloat alpha){
    return [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:alpha];
}

验证手机号

static inline bool predicateIsMobilePhone(NSString * mobilePhone){
    NSString * validateContent = @"1[3|5|7|8|4|][0-9]{9}";
    NSPredicate *validateTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", validateContent];
    return [validateTest evaluateWithObject:mobilePhone];
}

比较大小和取绝对值

#define MIN(A,B)    ((A) < (B) ? (A) : (B))
#define MAX(A,B)    ((A) > (B) ? (A) : (B))
#define ABS(A)  ((A) < 0 ? (-(A)) : (A))
(更多…)

By iOS收藏家, ago