当前位置: 首页 > news >正文

Apple基础(Xcode①-项目结构解析)

要运行设备之前先选择好设备

Product---->Destination---->选择设备

首次运行手机提示

如出现 “未受信任的企业级开发者”
→ 手机打开 设置 ▸ 通用 ▸ VPN与设备管理 → 信任你的 Apple ID 即可

ContentViewSwiftUI 项目最顶层、最主界面 的那个“页面”,相当于:

  • Flutter 的 MyApp()MaterialApp(home: …)

  • Android 的 MainActivity

  • Web 的 index.html

✅ 一句话理解:

ContentView 就是你 App 打开后第一眼看到的界面。

🏗️ 它长什么样?

新建 SwiftUI 项目时,Xcode 会自动生成下面这个文件:

// ContentView.swift
import SwiftUIstruct ContentView: View {var body: some View {VStack {Image(systemName: "globe").imageScale(.large).foregroundStyle(.tint)Text("Hello, world!")}.padding()}
}
  • struct ContentView: View → 声明这是一个视图(界面)

  • body → 描述界面的内容(文字、图片、按钮等)。

  • 默认显示一个地球图标 + “Hello, world!” 文字。

🧩 它在哪被用到?

YourAppNameApp.swift 里:

@main
struct MyFirstApp: App {var body: some Scene {WindowGroup {ContentView()   // ← 这里决定启动时显示谁}}
}

🛠️ 想改界面?

直接改 ContentView.swift 里的 body 就行。比如:

Text("Hello, world!").font(.largeTitle).foregroundColor(.red)

保存后按 ⌘R 跑真机,手机界面立即更新。


✅ 总结一句话:

ContentView 就是 SwiftUI App 的“首页”,你所有界面都从它开始。

Info.plist 是 iOS App 的“身份证+使用说明书”,告诉系统“我是谁、能干嘛、需要什么权限”。

  1. 在 Xcode 左侧导航栏找到 Info.plist → 双击即可图形化编辑

  2. 或在 Flutter 项目:ios/Runner/Info.plist 用 VS Code / Xcode 改都行

  3. 改完 ⌘S 保存 → ⌘R 重新跑真机即刻生效

类别举例字段作用
身份识别CFBundleIdentifier(Bundle ID)App 的唯一包名,如 com.mycompany.myapp
展示信息CFBundleDisplayName桌面图标下方的名字
版本号CFBundleShortVersionStringApp Store 向用户显示的版本(如 1.2.3)
权限弹窗文案NSCameraUsageDescription首次调用相机时,系统弹出的提示文字
系统能力开关UIRequiredDeviceCapabilities声明必须支持的功能(如需要陀螺仪、ARKit 等)

🛠️ 常见场景示例

想改 App 名称

<key>CFBundleDisplayName</key>
<string>新名字</string>

想访问相机必须加

<key>NSCameraUsageDescription</key>
<string>拍照用于头像上传</string>

Flutter 项目网络白名单

<key>NSAppTransportSecurity</key>
<dict><key>NSAllowsArbitraryLoads</key><true/>
</dict>

123

http://www.lryc.cn/news/604835.html

相关文章:

  • 第六章:进入Redis的List核心
  • 「Spring Boot + MyBatis-Plus + MySQL 一主两从」读写分离实战教程
  • Tomcat线程池、业务线程池与数据库连接池的层级约束关系解析及配置优化
  • 《Java 程序设计》第 12 章 - 异常处理
  • 配置国内镜像源加速Python包安装
  • Three.js 与 React:使用 react-three-fiber 构建声明式 3D 项目
  • 数据仓库深度探索系列:架构选择与体系构建
  • 标准七层网络协议和TCP/IP四层协议的区别
  • rsync+sersync实现文件实时同步
  • C++实战:抖音级视频应用开发精髓
  • 力扣219:存在重复元素Ⅱ
  • 基于deepseek的事件穿透分析-风险传导图谱
  • Java源码构建智能名片小程序
  • FastAPI入门:表单数据、表单模型、请求文件、请求表单与文件
  • CVAE 回顾版
  • springcloud03-Nacos配置中心
  • Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明
  • 如何通过项目管理系统提升交付率
  • 【ip】IP地址能否直接填写255?
  • Ubuntu22.04中搭建GN编译环境
  • 用Python+MySQL实战解锁企业财务数据分析
  • 深入浅出:C++ STL简介与学习指南
  • 文件加密工具(勒索病毒加密方式)
  • Dify 从入门到精通(第 4/100 篇):快速上手 Dify 云端:5 分钟创建第一个应用
  • VS2022 libtorch-win-shared-with-deps-2.7.1+cu126 配置记录
  • 程序开发中常用的 Emoji 符号
  • Python爬虫04_Requests豆瓣电影爬取
  • 生成模型实战 | GLOW详解与实现
  • JavaFX CSS @font-face 错误全面分析 loadStylesheetUnPrivileged / reportException
  • 快速删除Word和WPS文字中的空白行