作者: xiao, yanzi

RN集成到IOS的坑

4个文件,然后将其中的”localhost”改为你的电脑的IP地址

192.168.3.15

RCTWebSocketExecutor.m
RCTPackagerConnectionBridgeConfig.m
RCTInspectorDevServerHelper.mm
RCTBundleURLProvider.m
if (!host) {
//host = @”localhost”;
host = @”192.168.3.15″;

scheme = @”http”;
}

 

iOS原生混合RN开发*佳实践

做过原生iOS开发或者Android开发的同学们肯定也都了解Hybrid,有一些Hybrid的开发经验,目前我们企业开发中运用*广泛的Hybrid App技术就是原生与H5 hybrid,在早期的时候,可能部分同学也接触过PhoneGap等hybrid技术,今天我们就简单来聊下一种比较新的Hybrid技术方案,原生App与ReactNativie Hybrid。

示例Demo地址

  • 初级Demo示例
  • 高级Demo示例

具体步骤

  • 创建一个iOS原生项目
  • 将iOS原生项目支持pod
  • 调整目前项目工程的文件夹结构
  • 添加RN依赖相关文件
  • 安装React Native
  • 修改Podfile文件,原生安装React Native依赖库
  • 在iOS原生页面填加RN页面入口
  • 修改RN入口文件 index.ios.js
  • 执行npm start 运行项目

创建一个iOS原生项目

使用Xcode创建一个空的项目,这个应该不用多说了

项目支持pod

这一操作步骤同样也很简单,我们只需要执行下面的几条命令即可,如果对cocoapods 安装使用不熟悉的同学请参照作者简书

  • 创建podfile文件,我们在有xcodeproj文件的同级目录下执行下面命令,这时我们的项目文件中就多了一个Podfile文件
  1. $ pod init
  2. 复制代码
  • 执行pod install 命令来安装pod,同样,这个命令也是在有xcodeproj同级目录下,安装完成后,我们的项目多了一个
  1. $ pod install
  2. 复制代码

注意: 这里对原生iOS不熟悉的同学们需要注意了,当我们使用pod来作为库管理工具,后面我们打开项目运行,我们就需要打开上图所示的xcworkspace文件了

调整目前项目工程的文件夹结构

这里对文件夹做结构调整是为了后期更好的将Android原始项目也使用RN Hybrid,使iOS和Android共享一份React Native框架,共享同一份JS文件,调整的后的文件夹结构如下

添加RN依赖相关文件

到这里,我们原生的iOS项目目录结构已近调整完毕,后面我们需要处理的都是RN相关的内容了,这里需要创建的文件有点多,大家可以直接将示例Demo中的这几个文件直接拖到自己的项目中,然后在做修改即可

  • 首先我们需要创建package.json文件
  • 创建index.ios.js文件
  • 创建index.android.js文件
  • 创建bundle文件夹,注意这个文件夹是后面我们接入CodePush热更新时使用的

安装React Native

安装React Native这个也很简单,我们也是简单的执行下面的命令即可,注意:执行npm 系列的命令,我们都需要在项目根目录(有package.json文件的目录)下执行

  1. $ npm install
  2. 复制代码

package.json文件内容如下

  1. {
  2. “name”: “iOSHybridRNDemo”,
  3. “version”: “0.0.1”,
  4. “private”: true,
  5. “scripts”: {
  6. “start”: “node node_modules/react-native/local-cli/cli.js start”
  7. },
  8. “dependencies”: {
  9. “prop-types”: “^15.6.1”,
  10. “react”: “16.0.0”,
  11. “react-native”: “0.50.3”,
  12. “react-native-code-push”: “^5.2.2”,
  13. “react-native-root-toast”: “^1.3.0”,
  14. “react-native-router-flux”: “^4.0.0-beta.24”,
  15. “react-native-simple-store”: “^1.3.0”,
  16. “react-native-storage”: “^0.2.2”,
  17. “react-native-vector-icons”: “^4.3.0”,
  18. “react-redux”: “^5.0.6”,
  19. “redux”: “^3.7.2”,
  20. “redux-actions”: “^2.2.1”,
  21. “redux-promise-middleware”: “^4.4.1”,
  22. “redux-thunk”: “^2.2.0”
  23. },
  24. “devDependencies”: {
  25. “babel-jest”: “22.4.1”,
  26. “babel-preset-react-native”: “4.0.0”,
  27. “jest”: “22.4.2”,
  28. “react-test-renderer”: “16.0.0”
  29. },
  30. “jest”: {
  31. “preset”: “react-native”
  32. }
  33. }
  34. 复制代码

注意:因为我们项目中使用到了react-native-vector-icons 这个iconFont组件需要依赖原生,所以我们执行完 npm install 之后,我们还需要 再执行一个 react-native link react-native-vector-icons 命令来安装原生依赖

  1. $ react-native link react-native-vector-icons
  2. 复制代码

当我们执行完npm install 命令之后,我们再打开项目目录,发现多了一个 node_modules 文件夹,这个文件夹就是我们安装的React Native所有的依赖库

修改Podfile文件,原生安装React Native依赖库

后面我们都是使用Pod来管理原生的依赖库,安装React Native依赖库,我们只需要将下面的Podfile文件中的内容添加进去,执行 pod install 安装即可

Podfile文件

  1. # Uncomment the next line to define a global platform for your project
  2. platform :ios, ‘9.0’
  3. # Uncomment the next line if you’re using Swift or would like to use dynamic frameworks
  4. # use_frameworks!
  5. target ‘iOSHybridRNDemo’ do
  6. # Pods for iOSHybridRNDemo
  7. #***********************************************************************#
  8. # ‘node_modules’目录一般位于根目录中
  9. # 但是如果你的结构不同,那你就要根据实际路径修改下面的`:path`
  10. pod ‘React’, :path => ‘../node_modules/react-native’, :subspecs => [
  11. ‘Core’,
  12. ‘RCTText’,
  13. ‘RCTImage’,
  14. ‘RCTActionSheet’,
  15. ‘RCTGeolocation’,
  16. ‘RCTNetwork’,
  17. ‘RCTSettings’,
  18. ‘RCTVibration’,
  19. ‘BatchedBridge’,
  20. ‘RCTWebSocket’,
  21. ‘ART’,
  22. ‘RCTAnimation’,
  23. ‘RCTBlob’,
  24. ‘RCTCameraRoll’,
  25. ‘RCTPushNotification’,
  26. ‘RCTLinkingIOS’,
  27. ‘DevSupport’
  28. # 在这里继续添加你所需要的模块
  29. ]
  30. # 如果你的RN版本 >= 0.42.0,请加入下面这行
  31. pod “yoga”, :path => “../node_modules/react-native/ReactCommon/yoga”
  32. #***********************************************************************#
  33. pod ‘RNVectorIcons’, :path => ‘../node_modules/react-native-vector-icons’
  34. end
  35. 复制代码

注意: #*************************# 中间的内容是我们需要添加的RN依赖库,后面我们所有pod 相关的命令,我们都需要iOS根目录(有Podfile文件的目录)下执行

  • 执行安装命令
  1. $ pod install
  2. 复制代码

在iOS原生页面填加RN页面入口

现在我就来实现从原生页面跳RN页面

  • 使用RN提供一个View视图代码如下
  1. NSURL * jsCodeLocation;
  2. #ifdef DEBUG
  3. NSString * strUrl = @“http://localhost:8081/index.ios.bundle?platform=ios&dev=true”;
  4. jsCodeLocation = [NSURL URLWithString:strUrl];
  5. #else
  6. jsCodeLocation = [CodePush bundleURL];
  7. #endif
  8. NSDictionary *params = @{@“componentName”:@“MeApp1”, @“args”:@{@“params”:@“这是原生传递的参数”}};
  9. RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
  10. moduleName:@“iOSRN”
  11. initialProperties:params
  12. launchOptions:nil];
  13. self.view = rootView;
  14. 复制代码

修改RN入口文件 index.ios.js

修改RN页面的入口文件,这里当是iOS入口我们修改index.ios.js文件,当Android入口,我们修改index.android.js文件

  • index.ios.js文件
  1. import React, {Component} from ‘react’
  2. import {
  3. Platform,
  4. StyleSheet,
  5. Text,
  6. View,
  7. AppRegistry
  8. } from ‘react-native’;
  9. const instructions = Platform.select({
  10. ios: ‘Press Cmd+R to reload,\n’ +
  11. ‘Cmd+D or shake for dev menu’,
  12. android: ‘Double tap R on your keyboard to reload,\n’ +
  13. ‘Shake or press menu button for dev menu’,
  14. });
  15. type Props = {};
  16. export default class App extends Component<Props> {
  17. render() {
  18. return (
  19. <View style={styles.container}>
  20. <Text style={styles.welcome}>
  21. Welcome to React Native!
  22. </Text>
  23. <Text style={styles.instructions}>
  24. To get started, edit App.js
  25. </Text>
  26. <Text style={styles.instructions}>
  27. {instructions}
  28. </Text>
  29. </View>
  30. );
  31. }
  32. }
  33. const styles = StyleSheet.create({
  34. container: {
  35. flex: 1,
  36. justifyContent: ‘center’,
  37. alignItems: ‘center’,
  38. backgroundColor: ‘#F5FCFF’,
  39. },
  40. welcome: {
  41. fontSize: 20,
  42. textAlign: ‘center’,
  43. margin: 10,
  44. },
  45. instructions: {
  46. textAlign: ‘center’,
  47. color: ‘#333333’,
  48. marginBottom: 5,
  49. },
  50. });
  51. AppRegistry.registerComponent(‘iOSHybridRNDemo’, () => App)
  52. 复制代码

执行npm start 运行项目

到这里,我们一个简单的原生嵌入RN开发工程就搭建完成了,我们执行下面命令来运行项目,查看效果

  • 开启node 服务
  1. $ npm start
  2. 复制代码
  • 运行效果

(006)RN开发之iOS真机调试

*步,使用Xcode打开项目
第二步,使用真机运行项目
第三步,晃动手机,选择Debug JS Remotely
浏览器会自动打开地址:http://localhost:8081/debugger-ui/
第四步,将localhost修改为本机ip地址
查看电脑ip地址的方法:点击WiFi图标 –> 打开网络偏好设置…

将第三步中的地址改为:http://192.168.37.66:8081/debugger-ui/ (说明:192.168.37.66是我电脑的ip地址,这里需要替换为你自己的电脑的ip地址)

第五步,使用Xcode重新运行项目
8

第三章Mac系统下安装Vue-cli详细步骤

第三章Vue-cli安装

因为是mac系统,所以和视频里老师讲的有些许不同。
1.首先打开终端

%title插图%num

按照老师的操作,首先检查node版本
下面是我的操作
打开终端,输入命令 node -v 我去,找不到node。。。。。
好吧,去这个地方下载mac版本的node
下载地址:https://nodejs.org/en/download/ (选择mac os)
安装完毕,有了

%title插图%num
2.输入 sudo npm install -g vue-cli 这个命令

因为npm的关系所以有点进度有点慢,等待,终于好了

%title插图%num
3.输入 命令 vue 查看一下

%title插图%num
执行 vue list 查看

%title插图%num

这些是列出了可以用的模板

4.安装webpack模板,并设置工程信息
输入命令 vue init webpack sell
注释:sell是名称,自己可以随意命名

接下来输入项目名称,项目描述,作者,是否安装路由,是否使用后ES检测器,输入 y,需要,是否需要前端测试库n 不需要,完成。

%title插图%num
然后输入命令cd sell

输入命令sudo npm install

%title插图%num
输入命令sudo npm run dev

%title插图%num

以上!!mac系统安装Vue-cli完成!
etails/72902312

(0105)iOS开发之iOS13 暗黑模式(Dark Mode)适配

导读:
Material Design & iOS 13 黑暗模式总结探索

暗黑模式苹果开发文档

如何不进行系统切换样式的适配

注意

1  同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同。
2  苹果官方强烈建议适配暗黑模式(Dark Mode)此功能也是为了开发者能慢慢将应用适配暗黑模式,所以想通过此功能不进行适配暗黑模式,预计将会被拒。

暗黑模式的优点:
省电
沉浸式效果明显
深色背景的优势是可以突出与我们主要交互操作的内容,弱化其他辅助元素并降低屏幕整体的亮度减少视觉压力。
全局关闭暗黑模式
在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String, 将UIUserInterfaceStyle key 的值设置为 Light

单个界面不遵循暗黑模式
UIViewController与UIView 都新增一个属性 overrideUserInterfaceStyle
将 overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展示,不跟随系统模式改变进行改变

设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式
设置 View 的该属性, 将会影响视图及其所有子视图采用该样式
设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)
如何在代码里进行适配颜色(UIColor)

1 + (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
2 – (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

e.g.

1 [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trait) {
2     if (trait.userInterfaceStyle == UIUserInterfaceStyleDark) {
3         return UIColorRGB(0x000000);
4     } else {
5         return UIColorRGB(0xFFFFFF);
6     }
7  }];

系统调用更新方法,自定义重绘视图
当用户更改外观时,系统会通知所有window与View需要更新样式,在此过程中iOS会触发以下方法

1 traitCollectionDidChange(_:)
2 layoutSubviews()
3 draw(_:)
4 updateConstraints()
5 tintColorDidChange()

UIViewController

1 traitCollectionDidChange(_:)
2 updateViewConstraints()
3 viewWillLayoutSubviews()
4 viewDidLayoutSubviews()

UIPresentationController

1 traitCollectionDidChange(_:)
2 containerViewWillLayoutSubviews()
3 containerViewDidLayoutSubviews()

适配Dark Mode
颜色适配
图片适配
1 颜色适配
iOS13系统动态颜色
iOS13 之前 UIColor只能表示一种颜色,而从 iOS13 开始UIColor是一个动态的颜色,在LightMode和Dark Mode可以分别设置不同的颜色。
iOS13系统提供了一些动态颜色

1 @property (class, nonatomic, readonly) UIColor *systemBrownColor        API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
2 @property (class, nonatomic, readonly) UIColor *systemIndigoColor       API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
3 @property (class, nonatomic, readonly) UIColor *systemGray2Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
4 @property (class, nonatomic, readonly) UIColor *systemGray3Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
5 @property (class, nonatomic, readonly) UIColor *systemGray4Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
6 @property (class, nonatomic, readonly) UIColor *systemGray5Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
7 @property (class, nonatomic, readonly) UIColor *systemGray6Color        API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
8 @property (class, nonatomic, readonly) UIColor *labelColor              API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
9 @property (class, nonatomic, readonly) UIColor *secondaryLabelColor     API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
10 @property (class, nonatomic, readonly) UIColor *tertiaryLabelColor      API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
11 @property (class, nonatomic, readonly) UIColor *quaternaryLabelColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
12 @property (class, nonatomic, readonly) UIColor *linkColor               API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
13 @property (class, nonatomic, readonly) UIColor *placeholderTextColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
14 @property (class, nonatomic, readonly) UIColor *separatorColor          API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
15 @property (class, nonatomic, readonly) UIColor *opaqueSeparatorColor    API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
16 @property (class, nonatomic, readonly) UIColor *systemBackgroundColor                   API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
17 @property (class, nonatomic, readonly) UIColor *secondarySystemBackgroundColor          API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
18 @property (class, nonatomic, readonly) UIColor *tertiarySystemBackgroundColor           API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
19 @property (class, nonatomic, readonly) UIColor *systemGroupedBackgroundColor            API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
20 @property (class, nonatomic, readonly) UIColor *secondarySystemGroupedBackgroundColor   API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
21 @property (class, nonatomic, readonly) UIColor *tertiarySystemGroupedBackgroundColor    API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
22 @property (class, nonatomic, readonly) UIColor *systemFillColor                         API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
23 @property (class, nonatomic, readonly) UIColor *secondarySystemFillColor                API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
24 @property (class, nonatomic, readonly) UIColor *tertiarySystemFillColor                 API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);
25 @property (class, nonatomic, readonly) UIColor *quaternarySystemFillColor               API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos);

① 实例

1 [self.view setBackgroundColor:[UIColor systemBackgroundColor]];
2 [self.titleLabel setTextColor:[UIColor labelColor]];
3 [self.detailLabel setTextColor:[UIColor placeholderTextColor]];

效果展示

%title插图%num

用法和iOS13之前的一样,使用系统提供的这些动态颜色,不需要其他的适配操作

自定义动态UIColor
在实际开发过程,系统提供的这些颜色还远远不够,因此我们需要创建更多的动态颜色
初始化动态UIColor方法

iOS13 UIColor增加了两个初始化方法,使用以下方法可以创建动态UIColor
注:一个是类方法,一个是实例方法

1 + (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
2 – (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

这两个方法要求传一个block进去
当系统在LightMode和DarkMode之间相互切换时就会触发此回调
这个block会返回一个UITraitCollection类
我们需要使用其属性userInterfaceStyle,它是一个枚举类型,会告诉我们当前是LightMode还是DarkMode

1 typedef NS_ENUM(NSInteger, UIUserInterfaceStyle) {
2     UIUserInterfaceStyleUnspecified,
3     UIUserInterfaceStyleLight,
4     UIUserInterfaceStyleDark,
5 } API_AVAILABLE(tvos(10.0)) API_AVAILABLE(ios(12.0)) API_UNAVAILABLE(watchos);

② 实例

1 UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
2         if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
3             return [UIColor redColor];
4         }
5         else {
6             return [UIColor greenColor];
7         }
8     }];
9
10  [self.bgView setBackgroundColor:dyColor];

效果展示

%title插图%num
2 图片适配

%title插图%num
打开Assets.xcassets
新建一个Image set

打开右侧工具栏,点击*后一栏,找到Appearances,选择Any,Dark

%title插图%num

将两种模式下不同的图片资源都拖进去

%title插图%num

使用该图片

1  [_logoImage setImage:[UIImage imageNamed:@”icon_logo”]];
%title插图%num

大功告成,完成了颜色和图片的Dark Mode适配。

获取当前模式(Light or Dark)
有时候我们需要知道当前处于什么模式,并根据不同的模式执行不同的操作 iOS13中CGColor依然只能表示单一的颜色通过调用UITraitCollection.currentTraitCollection.userInterfaceStyle获取当前模式

1 if (UITraitCollection.currentTraitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
2         [self.titleLabel setText:@”DarkMode”];
3     }
4     else {
5         [self.titleLabel setText:@”LightMode”];
6     }
7

3. 其他
1.监听模式切换
有时我们需要监听系统模式的变化,并作出响应
那么我们就需要在需要监听的viewController中,重写下列函数

1 // 注意:参数为变化前的traitCollection
2 – (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection;
3
4 // 判断两个UITraitCollection对象是否不同
5 – (BOOL)hasDifferentColorAppearanceComparedToTraitCollection:(UITraitCollection *)traitCollection;
6

① 示例

1 – (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
2     [super traitCollectionDidChange:previousTraitCollection];
3     // trait发生了改变
4     if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
5     // 执行操作
6     }
7     }
8

2.CGColor适配
我们知道iOS13后,UIColor能够表示动态颜色,但是CGColor依然只能表示一种颜色,那么对于CALayer等对象如何适配暗黑模式呢?当然是利用上一节提到的监听模式切换的方法啦。

① 方式一:resolvedColor

1 // 通过当前traitCollection得到对应UIColor
2 // 将UIColor转换为CGColor
3 – (UIColor *)resolvedColorWithTraitCollection:(UITraitCollection *)traitCollection;

实例

1 – (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
2     [super traitCollectionDidChange:previousTraitCollection];
3
4     UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
5         if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
6             return [UIColor redColor];
7         }
8         else {
9             return [UIColor greenColor];
10         }
11     }];
12     UIColor *resolvedColor = [dyColor resolvedColorWithTraitCollection:previousTraitCollection];
13     layer.backgroundColor = resolvedColor.CGColor;
14

② 方式二:performAsCurrent

1 // 使用当前trainCollection调用此方法
2 – (void)performAsCurrentTraitCollection:(void (^)(void))actions;

示例

1 – (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
2     [super traitCollectionDidChange:previousTraitCollection];
3
4     UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
5         if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
6             return [UIColor redColor];
7         }
8         else {
9             return [UIColor greenColor];
10         }
11     }];
12     [self.traitCollection performAsCurrentTraitCollection:^{
13         layer.backgroundColor = dyColor.CGColor;
14     }];
15
16 }
17

方式三:*简单的方法
直接设置为一个动态UIColor的CGColor即可

1 – (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
2     [super traitCollectionDidChange:previousTraitCollection];
3     UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
4         if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
5             return [UIColor redColor];
6         }
7         else {
8             return [UIColor greenColor];
9         }
10     }];
11         layer.backgroundColor = dyColor.CGColor;
12 }
13
14

⚠️!!! 设置layer颜色都是在traitCollectionDidChange中,意味着如果没有发生模式切换,layer将会没有颜色,需要设置一个基本颜色

3.模式切换时打印log
在Xcode菜单栏Product->Scheme->Edit Scheme
选择Run->Arguments->Arguments Passed On Launch
添加以下命令即可
UITraitCollectionChangeLoggingEnabled YES

%title插图%num

4.强行设置App模式
当系统设置为Light Mode时,对某些App的个别页面希望一直显示Dark Mode下的样式,这个时候就需要强行设置当前ViewController的模式了

1 // 设置当前view或viewCongtroller的模式
2 @property(nonatomic) UIUserInterfaceStyle overrideUserInterfaceStyle;

示例

1 // 设置为Dark Mode即可
2 [self setOverrideUserInterfaceStyle:UIUserInterfaceStyleDark];

⚠️ 注意!!!

当我们强行设置当前viewController为Dark Mode后,这个viewController下的view都是Dark Mode
由这个ViewController present出的ViewController不会受到影响,依然跟随系统的模式
要想一键设置App下所有的ViewController都是Dark Mode,请直接在Window上执行overrideUserInterfaceStyle
对window.rootViewController强行设置Dark Mode也不会影响后续present出的ViewController的模式
5.NSAttributedString优化
对于UILabel、UITextField、UITextView,在设置NSAttributedString时也要考虑适配Dark Mode,否则在切换模式时会与背景色融合,造成不好的体验

推荐的做法

1 // 添加一个NSForegroundColorAttributeName属性
2 NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor labelColor]};
3 NSAttributedString *str = [[NSAttributedString alloc] initWithString:@”富文本文案” attributes:dic];
4
5

总结
总的来说,iOS13主要有以下变化:
1.支持 Dark Mode
2.UIColor变为动态颜色
3.更新StatusBar样式
4.更新UIActivityIndicatorView样式

iOS开发学习路线

初级iOS开发
iOS中级开发说白了,就是你学会了基本的UI界面搭建,上架,沉淀一段时间,你觉得自己还适合这门行业,还适合,还能接受 这个所谓的iOS开发工程师的行业.你就可以说是一名中级iOS开发.
这个沉淀时间 大约在1年的实际工作中,就可以完成.
如果你觉得这门行业不适合你,请仔细结合自身情况,是否转另一门计算机语言,还是彻底转行.
是否了解AFNetworking 的实现原理
是否了解SDAutolayout/Masonry 一种布局库的原理
是否能够处理基本的iOS崩溃原因/无法编译原因/无法上架原因?
是否拥有了一定的工作效率,稳定的工作效率.(而不是说,上面派了一个活下来,忙都忙不完,天天加班,还一堆bug)
是否能够处理第三方库引起的崩溃.
是否可以很好的融入工作环境,完成每一阶段的工作指标,而不会让自己疲惫不堪.
Xcode的使用
第三方库的灵活使用
AFN
MJRefresh
各种网站的使用
说明:作为一名初级的iOS开发,你需要具备以下技能
必备技能(全部都会的情况下查看下一项)
如何判断是否可以升阶
结论

中级iOS开发
如何判断是否可以升阶
结论
应用的内存处理
应用的推送处理
应用的模块化/单元测试
应用的第三方集成/集中化管理/稳定迭代
阅读强大的第三方源码/拥有快速上手新的第三方库的能力.
能够接受各种新功能的开发(这里是指,即使你没有做过,但是你仍然可以凭借着学习,解决任何业务需求:例如:蓝牙.AR.摄像头.硬件交互.等)
清楚明白数据的传递方式,应用与后台如何交换数据,交换数据的过程,结果,格式.
多线程的灵活使用.
各种并发事件的处理/以及界面的合理性/流畅度
设计模式的灵活使用.
说明:作为一名中级的iOS开发,你需要具备以下技能
必备技能(全部都会的情况下查看下一项)

高级iOS开发
应用的组件化/架构分层
数据结构,操作系统,计算机网络都有自己的了解和认知
Shell脚本/python/Ruby/JS 至少会一种.
说明:作为一名高级的iOS开发,你需要具备以下技能(我不是高级开发,所以这里只能给你们提供建议.)
必备技能

详细学习路线
学习路线
简介
这里只简单阐述一些概念性的东西,以及学习路线规划,真正的知识请从iOS基础知识点往下开始看.
Objective-C
介绍
概念
编译原理
程序启动原理
结束程序.
监听系统事件
Info.plist
.pch
App组成
打开程序
执行main函数
执行UIApplicationMain函数
初始化UIApplication(创建设置代理对象,开启事件循环)
语法.(此处定义可能略失严谨,口头教学为主)
基础语法
对象.
属性
数据类型
方法
继承
Frame/CGRect/CGPoint和CGSize
内存(针对MRC下情况进行介绍)
ARC/MRC
弱引用/强引用
Assign,retain,copy,strong
import 和@class的区别
Xcode使用
首先是针对Xcode菜单栏,希望自己可以去翻译一下每个菜单里每项功能的英文都是什么意思,有助于自己熟悉并加深印象的使用Xcode.
熟悉Xcode的各个功能.
UIKit控件.
界面分析(下载App进行学习).
界面适配
在这里推荐有兴趣的开发人员,下载并分析,AppStore中的每项分类的top50的应用,多学习大公司以及流行应用是如何开发应用的,其中流行的,新颖的开发界面的方式可以总结下来,猜想在大应用中,别的程序员是如何开发的.
代码架构.
代码架构文章推荐:https://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html
各种工具、第三方的使用.
其实每个项目的建立都大致分为:项目框架搭建,原生界面搭建,嵌入第三方库.有很多功能都会用到第三方库,大多数第三方库都是本着快速开发,完整功能实现的目的存在的.需要开发人员能够根据业务逻辑不同,选择*好*优质的第三方库进行使用.
代码封装
当使用较多第三方库后,要求开发人员学习其开发特点,以及其封装手法,运用在自己的项目上,封装自己的代码.灵活运用.
完整项目.
开发技巧
个人心得

iOS基础知识点
iOS基础知识点
如何学习iOS
开始涉猎不止于iOS领域中的知识,会去了解相关职位的基础知识,例如前端和后台或者服务器运维,或者项目相关知识,具体往自己的职业规划靠拢
多看开源或者注明的第三方库.
收藏并阅读各种大神的博客或者论坛.
开始考虑项目中的细节优化,内存处理和耗电情况
打好基础,学习OC中各种常用语法.
学习如何上架,上架会因为什么被拒,了解App上架规则.
多学习官方说明文档.
刚刚入门(如何学习)
刚刚入职1年(如何稳定)
入职3年(如何进阶)
框架的学习
AFNetworking
SDAutoLayout
YYKit
SDWebImage
MJRefresh
MJExtension
Bugly
Qiniu
Masonry
TZImagePickerController
Hyphenate_CN
第三方框架
苹果自带框架
基础UI控件
UILabel 标题栏
UIButton 按钮
UIImageView 图片视图
UITextField 文本输入框
UITextView 文本展示视图
UIProgressView 进度条
UISlider 滑动开关
UIGesture 手势
UIActivityIndicator 菊花控件
UIAlertView(iOS8废除) 警告框
UIActionSheet(iOS8废除) 操作表单
UIAlertController(iOS8出现) 警告视图控制器
UIScrollView 滚动视图
UIPageControl 页面控制器
UISearchBar 搜索框
UITableView 表视图
UICollectionView集合视图
UIWebView网页浏览器
UISwitch开关
UISegmentControl选择按钮
UIPickerView选择器
UIDatePicker日期选择器
UIToolbar工具栏
UINavigationBar通知栏
UINavigationController通知视图控制器
UITabbarController选择视图控制器
UIImagePickerController相册
UIImage图片
Xcode的使用
内存监测
全局断点
全局搜索替换
界面适配
StoryBoard
界面预览
基础操作 状态栏
偏好设置
Xcode Source Control 源代码管理器
Xcode workSpace工作组
Xcode Scheme 计划
Xcode AutoLayout 约束
Xcode CoreData数据库
LLDB 断点调试
数据存储
沙盒存储
NSDictionary归档
NSUserDefault
CoreData
NSKeyedArchiver
SQLite
FMDB
plist
App生命周期
alloc
init
创建View
ViewDidLoad
ViewWillAppear
ViewDidAppear
ViewWillDisappear
ViewDidDisappear
视图将要消失 (做一些视图将要消失时的UI的处理)
视图已经消失 (做一些视图消失之后数据的处理)
viewDidDisappear销毁定时器
dealloc
didReceiveMemoryWarning
控制器生命周期
应用生命周期
开发者账号&上架流程
个人
公司
企业
https://www.jianshu.com/p/6601a241da8e
https://www.jianshu.com/p/7c98651d3532
https://www.jianshu.com/p/9b994a019ee6
文章推荐:
常用知识
响应链
异常捕捉
国际化
代码模块化
类别/扩展
iPad与iPhone的区别
静态库
内存管理
Quartz2D
真机调试
isKindOfClass 与 isMemberOfClass
Return/Break/Continue
Core Animation
CALayer
AutoLayout
KVC/KVO
谓词NSPredicate
帧动画
界面旋转+状态栏隐藏
plist文件
通信
NS系列
宏定义
视图层次
切换视图
深浅拷贝
对象序列化
写入文件
获取沙盒路径
翻转视图
延伸视图
九大基本数据类型
九宫格
坐标比较
UIColor 、CIColor和CGColor 之间的关系
画图
静态变量
tag值
延时执行方法

中级知识点
设计模式
UIScrollView/UITableView/UICollectionView 的嵌套
动态行高
通知/代理/block
程序启动原理
触摸事件/手势
图文混编
Runtime
NSRunLoop
GCD
ReactiveCocoa开发
3DTouch
界面渲染
Charles花瓶抓包
区分模拟器/真机项目
常用知识
Block
蓝牙/传感器
物理仿真器UIDynamic
通讯录获取
音频/视频/二维码
真机调试
苹果内购/广告
推送/远程推送
单例模式
多线程
网络请求
定位
源代码管理Git

iOS高级知识点
iOS高级知识点
Socket
XMPP
加密
MD5详解
Base64加密解密
RSA非对称加密
AES对称加密
音频
基础
Core Audio
Audio Toolbox
OpenAL
AVFoundation
Speex语音聊天
AudioQueue/AudioSession
Speex简介
视频
AAC视频.H264推流
P2P传输
直播
RTMP协议
RTMP直播应用与延时分析
如果做一款inke版的App
推流发布和播放RTMP
FFmpeg
基于FFmpeg的推流器
HLS流媒体传输协议(HTTP Live Streaming)
FFmpeg
ijkPlayer
直播的技术分析与实现
算法
简介
冒泡排序
快速排序
插入排序
归并排序
二分查找
希尔排序
动态规划
堆排序

官方Kit
ARKit.
SiriKit
HealthKit
HomeKit
SearchKit
IOKit
PDFKit
CloudKit
GameplayKit
SpriteKit
SceneKit
MusicKit
ResearchKit
MapKit
StoreKit
AVKit

iOS 上有什么让数据 100% 不会被系统读取和上传的笔记软件?

一直坚持重要数据不上云的原则,每次打开存放重要笔记的应用前一定开飞行模式。昨天把 iPad 抹掉所有内容,从备份恢复后发现我 iPhone 上的笔记应用数据还是全被上传到了 iCloud 上。虽然我知道备份功能可以关掉,但我担心 iOS 的某个我不知道的功能还是会上传应用数据。请问 iOS 上有什么让数据 100% 不会被系统读取和上传的笔记软件吗?(我注意到一些应用即使在相同设备上恢复备份也会丢失所有加密数据,应该系统是有存放使用设备密钥加密且不上传的位置)
85 条回复    2021-04-08 13:26:24 +08:00
Encloud
    1

Encloud   19 小时 31 分钟前   ❤️ 27

我想知道是什么让你养成了这样谨慎的性格
OYSTER2DO
    2

OYSTER2DO   19 小时 30 分钟前

不知道说点什么,只能来一句牛啊
septemfj
    3

septemfj   19 小时 30 分钟前

专注笔记,不开同步,应该可以。
lgood3782
    4

lgood3782   19 小时 28 分钟前

其实吧,如果只是要一个笔记软件并且需求不多的情况下,可以自己写一个……代码网上很好找,自己写逻辑也不难,自己写的代码肯定不会有什么乱七八糟的上传之类的功能,对你的需求来说是完美
wjgmytwq
    5

wjgmytwq   19 小时 27 分钟前

你这个不上云,指的是不上 icloud,还是不上 app 自己的云端?
“每次打开存放重要笔记的应用前一定开飞行模式”,你这个叫掩耳盗铃么。。。等你恢复网络了,人家后台或者再次打开 app 不就可以同步了?你以为你再禁网期间记录的东西,人家就不再处理了?
cmdOptionKana
    6

cmdOptionKana   19 小时 26 分钟前

可以买一台备用机,一直不插卡不联网。

但我还好奇一个问题,你如何备份,手机总会坏的,不联网里面的笔记如何导出?

Linioi
    7

Linioi   19 小时 24 分钟前 via Android   ❤️ 1

自己基于 AOSP 编译一个原生 Android 倒是有可能。但是 iOS 没有希望吧…除非你永远不联网…
wy315700
    8

wy315700   19 小时 24 分钟前

涉密数据*好用专门的涉密机器。。。
littlewing
    9

littlewing   19 小时 19 分钟前 via iPhone

自己写一个
Ballmer
    10

Ballmer   19 小时 17 分钟前

一般笔记可以加密码啊,你加一个超级复杂的秘密,然后这个密码记在脑子里就行

wangkun025
    11

wangkun025   19 小时 16 分钟前

先让 Apple 给保证吧。Apple 不给的话,就没有 100%。
mxT52CRuqR6o5
    12

mxT52CRuqR6o5   19 小时 15 分钟前   ❤️ 5

用传统纸质的笔记本就行了
hdjs5264
    13

hdjs5264   19 小时 2 分钟前

再买一个,不联网就行
EasonC
    14

EasonC   18 小时 52 分钟前 via iPhone

那肯定是选择 all in one 的 notion 了呀
theklf4
    15

theklf4   18 小时 39 分钟前 via iPhone

@lgood3782 #4 还是有可能上 Apple 的云呀。
@wjgmytwq #5 指不上任何云端。飞行模式指的是使用软件全程不联网,目前用的是 Shortcuts 实现。
@cmdOptionKana #6 备份到不联网的电脑。
cmdOptionKana
    16

cmdOptionKana   18 小时 34 分钟前

@theklf4 iphone 那些 app 的数据好像不是简单插线就能导出的吧,而且还有 app 升级的问题,旧版 app 经常不支持新版 iOS,换手机的时候(如果不走云端的话)旧版数据可能无法导入。
theklf4
    17

theklf4   18 小时 29 分钟前 via iPhone

@cmdOptionKana #16 iTunes 备份,实在不行就只备份截图了。
theklf4
    18

theklf4   17 小时 48 分钟前 via iPhone

@Encloud #1 从小就非常谨慎,累死了。输密码只敢在确认周围不可能有摄像头的情况下躲进被窝输。
@mxT52CRuqR6o5 #12 纸质笔记本不能加密,也不能复制 / 粘贴。
@hdjs5264 #13 设备完全不联网不方便保存网络上的内容。
liuzhaowei55
    19

liuzhaowei55   17 小时 42 分钟前 via Android   ❤️ 1

那还是选择 Android 设备吧,用苹果注定不可能的,设备激活 app 安装等都无法脱离网络,Android 虽然总是被骂,但是在这方面还是有优势的。
hstdt
    20

hstdt   17 小时 34 分钟前 via iPhone   ❤️ 2

关闭网络权限就行了
OliverDD
    21

OliverDD   16 小时 58 分钟前

自己写个
deplives
    22

deplives   16 小时 56 分钟前 via iPhone

买一个纸质的本子记下来吧
kaiki
    23

kaiki   16 小时 55 分钟前

达芬奇写手稿的时候可没有啥 APP,结果他的手稿不是一大堆现在还没有人破解的?
自己想一个算法自己写密码日记吧。
Jooooooooo
    24

Jooooooooo   16 小时 52 分钟前

都这样了, 两个方案

1. 用纸质的笔记本记东西

2. 学会 iOS 开发, 自己开发一个本地的应用 (当然这要求你信任 iOS 系统本身, 实际上你不应该, 还是选 1 吧

dingwen07
    25

dingwen07   16 小时 44 分钟前 via iPhone

安卓上开源笔记本软件一大把
其实用 iOS 自带的备忘录,保存在“我的 iPhone”下面就不会传到云端(需要在备忘录设置里开启)。
ruixue
    26

ruixue   16 小时 40 分钟前

这么*端的需求,还是用 AOSP,从 F-Droid 装个本地编辑器和输入法吧
系统和应用都开放源代码,可以自己审计
iOS 保护隐私的前提是你需要信任 Apple,如果你的隐私要求 Apple 都无法信任,那么并不适合用 iOS
Jooooooooo
    27

Jooooooooo   16 小时 38 分钟前   ❤️ 2

@dingwen07 这样当然不行, 楼主显然没有能力去把安卓的每一行代码都确认安全.
swulling
    28

swulling   16 小时 31 分钟前

把 SIM 卡拔了,然后不连 wifi
Pactzhao
    29

Pactzhao   15 小时 29 分钟前 via iPhone

弄个专门的机器 不插手机卡 一直开飞行模式 这样应该是*安全的了吧
WhoAmIPeople
    30

WhoAmIPeople   15 小时 8 分钟前

其实,心情完全可以理解. Evernote 中国版独立后,有同样的担心,写日记的时候感觉没有隐私了。
xfrgux
    31

xfrgux   14 小时 32 分钟前

iCloud 里把备忘录关了就行
7gugu
    32

7gugu   14 小时 29 分钟前

感觉还是纸笔写放保险柜能够更符合你的需求
NeezerGu
    33

NeezerGu   14 小时 22 分钟前

@Encloud 冠希哥小号
ooops
    34

ooops   14 小时 12 分钟前 via iPhone

两个手机 一个不联网 完美解决。
bnrwnjyw
    35

bnrwnjyw   13 小时 49 分钟前 via iPhone

谨慎很好,但是这样也太累了
LonelyRainDrop
    36

LonelyRainDrop   13 小时 43 分钟前

@NeezerGu 如果只是冠希哥那样也不必如此,毕竟不是也啥名人。
其实只要不是经常发表会被查水表言论的,就没必要太过于谨慎,属于自己折腾自己
vain
    37

vain   13 小时 29 分钟前

每次写完以后把内容用 PGP 加密 不就完事了。下次要看 /编辑 之前先解密,解密后全程飞行模式,不怕了吧?
aotuman233
    38

aotuman233   13 小时 8 分钟前

不想自己的任何隐私被别人知道,就不要使用手机平板等移动设备。自己去 pc 开几个虚拟机管理不同账户,自己裁剪内核,自己做磁盘加密才是比较安全的做法。
如果做不到以上这些的话,还是去看一下心理医生治一下被害妄想,让自己活得不那么累。(无任何恶意)
alphatoad
    39

alphatoad   12 小时 49 分钟前   ❤️ 1

这有什么好冷嘲热讽的,这是个非常 legit 的需求
用 1Password 的 secure note 即可,备份到云端的只有加密过的垃圾,Apple 读不出来
fatelight
    40

fatelight   9 小时 18 分钟前

请问用微信吗?如此谨慎建议别用,微信国内 im 都会分析你的数据
fatelight
    41

fatelight   9 小时 13 分钟前   ❤️ 1

现在国内立法监管问题,很多你避不开。无论是国内软件各种分析用户数据,就连你点击屏幕什么位置,停留时间都会收集。更别说你的其他数据了。iOS 也逃不掉。
现实中各种摄像头,买房买车都能给你监控打标签,建议戴口罩帽子去 [并非抬杠,现在 4s 和买房的都这样搞,就为了多赚你钱]
IgniteWhite
    42

IgniteWhite   8 小时 32 分钟前 via iPhone

我自己打了个人 wiki,全平台浏览器访问。尽管我经常分享给他人,但是数据都在我自己服务器
rund11
    43

rund11   5 小时 21 分钟前 via Android

群晖自建的 nas note 可以。自家服务器,有客户端,不会被第三方获取
ShuoHui
    44

ShuoHui   5 小时 9 分钟前 via iPhone

矫枉过正
november
    45

november   5 小时 0 分钟前 via iPhone

你可以弄个在线笔记网站,弄个自己服务器,通过 ios 浏览器来访问笔记内容。这样就算到了 pc,也不会被系统读取。

谨慎是好,我对自己隐私也在意。我一些东西都是自己建立的服务器,比如密码管理软件、网盘等。我笔记软件也是使用开源的,并且内容自己保存。

但是还没到怀疑 ios 系统本身上去。因为一旦到这地步的话,就很多不信任了。*终会回到物理笔记本上。

hccsoul
    46

hccsoul   4 小时 58 分钟前 via iPhone

?可能这就是涉密人员吧
zangbo
    47

zangbo   4 小时 54 分钟前

*终解决方案是手写。
InternetExplorer
    48

InternetExplorer   4 小时 44 分钟前

笔记本了解一下,学校门口小卖部 1 块钱一个,随便再买支笔。
PostMeridiem18
    49

PostMeridiem18   4 小时 26 分钟前

@alphatoad 可能大家都觉得这个问题提出的方式有问题:虽然是个人的重要数据,但是没有进一步说明采用这样高谨慎程度的做法的理由给人的*印象就是矫枉过正;其次所有手机上的软件都是要经过 iOS 系统层的——数据通过键盘输入也相当于被系统读取了一遍,机密信息要显示在屏幕上也需要被 iOS 系统读取一遍之后它才能知道点亮关闭哪些像素显示出汉字来,所以原问题中“100%不会被系统读取”是个多少自相矛盾的说法
SevenStep
    50

SevenStep   4 小时 16 分钟前 via iPhone

@hccsoul 涉密那都全物理断网,也没这个需求了?
SuperXRay
    51

SuperXRay   4 小时 13 分钟前

#16 “纸质笔记本不能加密,也不能复制 / 粘贴。”
既然有复制粘贴的需求,国内 app 都会读取粘贴板这个你知道的吧
只能买一个机器一开始就不插卡,不联网使用了
Xusually
    52

Xusually   4 小时 8 分钟前

自己写一个,然后部署到不联网的 iOS 设备上用。
Avedge
    53

Avedge   4 小时 6 分钟前

@hccsoul 真是涉密人员,规章流程里都会要求如何做到保密,更不会有用手机来存储的这种需求。
treblex
    54

treblex   4 小时 1 分钟前

不是系统读取了你的笔记上传,而为笔记软件支持了 iCloud 同步,看看软件设置有没有开关吧
treblex
    55

treblex   3 小时 58 分钟前

@treblex 疑惑 icloud 手机备份 和 mac 电脑的手机备份 算不算上传了你的数据
SY413927
    56

SY413927   3 小时 48 分钟前   ❤️ 1

问题不是很好解决的吗, 换个思路想, 你不信任谁
你不信任 App 开发者, 那你就自己撸一个, 网上找个代码, 很简单的
你不信任苹果公司. 那你只能换手机了
crclz
    57

crclz   3 小时 44 分钟前

涉密数据用开源的 Keepass 发行版解决,Keepass 可以选择上云(配合坚果云使用),但是是加密后上云。
ericwoflskin
    58

ericwoflskin   3 小时 42 分钟前

好奇 LZ 都存了些什么内容,说来听听,让我们看看有没有必要这么大费周章。
djs
    59

djs   3 小时 34 分钟前

手写的当然可以加密
idhrwb01296
    60

idhrwb01296   3 小时 29 分钟前

楼主怕不是放的什么冷钱包私钥吧
junbao
    61

junbao   3 小时 28 分钟前 via Android

直接去整个服务器不就完事了吗,东西都在服务器上编辑,要加密直接把文档压缩
l4ever
    62

l4ever   3 小时 25 分钟前

随便找个 app, 禁止这个 app 联网.
iOS 要读的话就没办法了, 如果这么谨慎, 自己写个系统呗.
l4ever
    63

l4ever   3 小时 24 分钟前

@mxT52CRuqR6o5 不行啊, 会被人看到的.
dragonfuhuang
    64

dragonfuhuang   3 小时 22 分钟前

人家是想来解决问题的,有就好心回复一下,没有就当没看过,建议可以提,冷嘲热讽就没必要了
wjgmytwq
    65

wjgmytwq   3 小时 19 分钟前

禁 app 上网就可以了,找个类似 surge 的软件,把这个 app 所有请求 reject
James369
    66

James369   3 小时 13 分钟前

App 不是可以设定不使用“局域网与蜂窝网络”吗,针对某个特定的 App 设置一下就可以了
vain
    67

vain   3 小时 2 分钟前

还是重复一遍之前的意见,如果怕 APP 上传自己的文字记录,那么可以按以下 3 步骤走(仅限未越狱 iOS 操作):
1.联网下好编辑的 APP
2.断网后编辑内容,编辑完后使用 PGP 加密文本,另存文本到其它 APP 或目录,删除编辑 APP 和 APP 数据。
3.重新联网,可发送加密后的文本或备份到网上。
shyling
    68

shyling   2 小时 55 分钟前

买个不插卡不联网的 iPhone
moioooo
    69

moioooo   2 小时 54 分钟前

连 ios 的网络权限、安全保证都不信的话,那就很难了啊。
如果你不信的话,
1 、你设定的飞行模式,但是你不知道是不是开启飞行模式之后,ios 在此期间偷偷记录的东西会不会上传。
2 、你也不知道 ios 会不会在系统层面偷偷记录。

同比,各种 ios 上的离线 app,你都信不过。因为任何操作,不管是加密还是明文的,你在编辑查看的时候,都是你能看懂的,也就是 ios 的屏幕显示的是明文。所以,万一它存了并且上传了呢?

所以。还是放宽点心吧。

NatsuMune
    70

NatsuMune   2 小时 44 分钟前 via iPhone   ❤️ 1

@Jooooooooo 如何确认 CPU 没有设置后门也是个问题,看来有必要从自研 CPU 开始
Leonard
    71

Leonard   2 小时 34 分钟前

iOS 任何笔记软件都建立在 iOS 系统上,你要是 iOS 系统也不信任的话,建议纸质笔记手写
vcode
    72

vcode   2 小时 10 分钟前

不联网
alfchin
    73

alfchin   1 小时 58 分钟前 via iPhone

@cmdOptionKana airdrop
jsjgjbzhang
    74

jsjgjbzhang   1 小时 58 分钟前

买个笔记本,带电带网的都不行
WilsonGGG
    75

WilsonGGG   1 小时 54 分钟前

Bear 不付费就好了,还省钱

P.S. 这样真的好累

Lemeng
    76

Lemeng   1 小时 43 分钟前

隐私这种东西,注意大方面就好,矫枉过正,就没必要了。很废神的
CantSee
    77

CantSee   1 小时 32 分钟前

自己写一个,放在家里服务器上,数据自己保存
VersusClyne
    78

VersusClyne   1 小时 31 分钟前

指纹烧掉防指纹识别
脸毁容防人脸识别
腿打断防步态识别
虹膜……
算了你开心就好
反正数据只要离开你的脑子,就算上云,只是这个云在不在你手里和距离有多远的区别罢了
有本事学币圈大佬把 ID 助记词密码全背下来
VersusClyne
    79

VersusClyne   1 小时 28 分钟前

只要数据高强度加密就行了 到时候毁掉密钥或者加密硬件(芯片 /key ) 只要保证数据无法解密就行
sonyxperia
    80

sonyxperia   1 小时 27 分钟前 via Android

只有传统意义的笔记本才能满足你的需求了
chiu
    81

chiu   26 分钟前

你像日剧里的人
Ultraman
    82

Ultraman   25 分钟前 via Android

手动 GPG
lizytalk
    83

lizytalk   21 分钟前

您是间谍还是特工,这么谨慎
nomemo
    84

nomemo   3 分钟前

你活在系统里说不让系统看到,真是搞笑

用纸和笔吧

mcluyu
    85

mcluyu   几秒前

这样很难,没有什么是百分百能保证的,即便你自己写一个 APP,但是估计连键盘你都得自己实现,因为键盘输入数据系统也会记录分析数据的。。建议还是随身携带一个小本本吧或者干脆记在脑子里,别写下来留下任何记录。

Mac 设置安全与隐私没有允许任何来源选项

Mac系统默认是不允许安装通过第三方平台下载的软件,当我们通过第三方途径(比如百度网盘或者其他网站)下载的软件,安装的时候都需要去“系统与偏好设置”中的”安全与隐私”中设置允许安装软件。每次去设置一下,有点麻烦,那么有没有一次性解决的办法呢?当然有,不过需要用命令行。打开终端,直接在终端中输入如下命令:

sudo spctl –master-disable
1
这句命令行的意思是允许任何来源的软件安装。

重新打开安装与隐私设置,就会发现多了一个“允许任何来源”的选项,如下图:

%title插图%num

解决 macos Sierra 系统「安全性与隐私」设置中没有任何来源选项问题

1.打开「终端」:应用程序->实用工具->终端;
2.粘贴下面的命令后,按回车,输入你的系统密码;
sudo spctl –master-disable
3.再次打开安全设置选项,就会发现「任何来源」选项回来了

PS:其实对于升级系统前,已经是任何来源选项的,还会显示,不会改变,但别的选项的,升级后就会消失.

下载 连接windows远程桌面的软件:https://www.douban.com/note/582866854/?type=rec

Mac“安全性与隐私”中添加“任何来源”方法

安装软件打不开时,需更改“设置”中的“安全性与隐私”

方法:
输入“sudo spctl —master-disable”粘贴至“终端”运行代码(回车),然后再输入你电脑的password(回车)即可。

此时,Mac“安全性与隐私”中添加了一项“任何来源”,且已选择并锁定。

%title插图%num
有些安装好的软件,就可以打开了。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速