Widget 布局
1.单子布局
单子布局组件的含义是其只有一个子组件,可以通过设置一些属性设置该子组件所在的位置信息等。比较常用的单子布局组件有:Align、Center、Padding、Container。
1.1 Align1234567const Align({ super.key, this.alignment = Alignment.center, // 对齐方式 this.widthFactor, // 宽度因子,不设置的话尽可能大 this.heightFactor, //高度因子,不设置的话尽可以大 super.child, // 子widget})
因为子组件在父组件中的对齐方式必须有一个前提,就是父组件得知道自己的范围(宽度和高度);
如果widthFactor和heightFactor不设置,那么默认Align会尽可能的大(尽可能占据自己所在的父组件);
我们也可以对他们进行设置,比如widthFactor设置为3,那么相对于Align的宽度是子组件跨度的3倍;
简单操作:12345678910111213141516171819202122class ...
Mac Appium 运行
iOS 运行WebDriverAgent 工程配置
需要提前准备一个开发者账号 $99
运行WebDriverAgent工程运行选择target选择设备运行
命令行运行获取设备udid1idevice_id -l
cd WebDriverAgent工程目录下1xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=设备的udid" USE_PORT=8100 test
命令行使用脚本执行命令行的执行方式可以结合成sh脚本 ,这个步骤不是必须的
新建 sh 文件cd WebDriverAgent工程目录下1vi start.sh输入内容12345678910# 解锁keychain,以便可以正常的签名应用,PASSWORD是你自己mac电脑的开机密码# 这个步骤不是必须的PASSWORD="xxxx" security unlock-keychain -p $PASSWORD ~/Library/Keychains/lo ...
Appium + WebDriverAgent iOS 自动化测试
前言mac 搭建 Appium 自动化测试环境
环境搭建
环境
作用
版本
Mac
系统
macOS Sonoma
Homebrew
Mac 包管理器
4.2.10
npm
node.js 包管理器
8.3.1
nodejs
js 运行环境
v16.14.0
Carthage
iOS 包管理
0.39.1
ideviceinstaller
列出安装app的信息
libimobiledevice
appium连接iOS设备依赖库,可以获取iOS库的信息
Xcode
开发工具
15.2
WebDriverAgent
集成Appium测试ios应用的桥梁
7.01
Appium - Desktop
客户端
1.22.3
Appium - inspector
检查app元素的工具
2024.2.2
Appium - doctor
检测Appium整体依赖环境配置情况
1.16.2
Android sdk
Google提供的Android开发工具包
JAVA_JDK
Homerbrew国内源:1/bin/zsh - ...
Xcode 不同Target多语言词条同步
场景已经存在一个主Target,要新建一个Taregt 并且多语言词条的内容一致,但是要求部分关键内容需要更改。
操作新建多语言文件在新建Target的文件夹中新建 InfoPlist.strings 和 Localizable.strings
选择需要同步的语言
python脚本123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960import osimport shutildef copy_and_replace_strings(source_dir, target_dir, old_text, new_text): try: # 获取源目录下的一级文件夹 folders = [f for f in os.listdir(source_dir) if os.path.isdir(os.path.join(source_dir, f))] # 遍历一级文件夹 ...
ios 多播网络(Multicast)应用权限
前言用户将手机连接到路由器后,利用路由器广播报文与设备进行通信配对。对手机、路由器、App 有兼容性或者权限要求。苹果(Apple.com)为提升安全性引入 Multicast 权限,在iOS14 之后需要申请该权限
申请填写这个过程大概要 5 个工作日,需要等待apple回复邮件
1.前往苹果开发者官网申请 Multicast 权限
2.填写信息
填写项
填写示例
注意事项
App Name
主账号申请
App Store URL
Apple ID of App
App Category
Lifestyle
Describe the main purpose of your app
应用描述
Explain why your app needs to send multicast or broadcast traffic, or browse for all Bonjour service types.
我们的 App 需要和我们的硬件设备进行通信,由于 IP 地址和端口不固定,使用自定义的广播组播协议进行通信,使用 UDP 6666、 ...
Xcode 多渠道打包
前言同一份代码,要打包成不同的APP,但是要区分图标、名称、部分功能点
方式:
直接复制一份修改,弊端是如果后续需要同步维护很麻烦
建立新的target
操作创建新的target(基于现有的targte复制出来)
TARGETS - 选中工程target - 右键出现上述选项 - 选中 Duplicate
在列表中出现复制项目target
工程文件夹中出现复制项 plist 文件
修改target和Scheme名称
工程配置信息 info.plist 路径配置
工程文件夹中,新建文件夹 xxxx ,用来存放新target的内容
复制项 plist 文件,改名 - 移动到 xxxx 文件夹下
xxxx 文件夹拖拉进项目中,如下配置
info.plist 路径配置 `Build Settings - Packaging - info.plist file - 配置新plist的路径
配置预处理器宏,用来区分代码中的环境Build Setting–>Preprocessor Macros
app icon 配置
Assets目录下 - 新建 app icon新建的target ...
SwiftUI 开发安卓
介绍除了Flutter和RN,还有尝试使用SwiftUI开发跨平台
开发环境
最低版本
Xcode
15
Android Studio
2023
Homebrew
4.1.0
iOS
16
Android
29
工作流程
使用swift和swiftUI进行编码
使用skip转译成Kotlin
运行操作完成后,SwiftUI App 将在所选的 iOS 模拟器中打开,同时转译的 App 将在当前运行的 Android 模拟器中启动
跨平台方案比较
Skip
Flutter
React Native
Xamarin
KMP Compose
Ionic/Cordova
Development Language
Swift
Dart
JavaScript
C#
Kotlin
JavaScript
UI Framework
SwiftUI
Flutter
HTML/JSX+CSS
XAML/MAUI
Compose
HTML+CSS
Package Manager
SwiftPM
Pub/CocoaPods
NPM
NuGet ...
Flutter 路由导航
页面的跳转、管理和导航由路由统一管理路由听的多的是在前端,ios为了解决组件化的解耦问题,也有引入路由的思路。
架构组件MaterialApp页面的入口123456789101112131415161718192021222324252627282930313233343536373839MaterialApp MaterialApp({ Key? key, GlobalKey<NavigatorState>? navigatorKey, // 导航键 GlobalKey<ScaffoldMessengerState>? scaffoldMessengerKey, //主要是管理 Scaffolds Widget? home, // 应用程序默认路由的小部件,用来定义当前应用打开的时候,所显示的界面 Map<String, Widget Function(BuildContext)> routes = const <String, WidgetBuilder>{}, // ...
Flutter 常用的Widget
1.Text
文本Widget
类似iOS中的UILabel1.1 普通文本
控制显示的分成两类:
控制文本布局的参数: 如文本对齐方式 textAlign、文本排版方向 textDirection,文本显示最大行数 maxLines、文本截断规则 overflow 等等,这些都是构造函数中的参数;
控制文本样式的参数: 如字体名称 fontFamily、字体大小 fontSize、文本颜色 color、文本阴影 shadows 等等,这些参数被统一封装到了构造函数中的参数 style 中
123456789class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Text( "《定风波》 苏轼 \n莫听穿林打叶声,何妨吟啸且徐行。\n竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。", style: TextStyle(fontSize: 20, color: Color.fro ...
iOS Crash信息
test
