1
zhangleshiye 2022-07-31 11:51:27 +08:00 1
我觉得 sdk 可以沿用 c++, 界面就别想了,老老实实用原生的吧,打开文件需要应用向系统授权,这个肯定要用 oc 或者 swift 来处理的
|
2
finab 2022-07-31 11:51:40 +08:00 1
1. swift 没调过 c++ 不太清楚,但 swift 可以无障碍调用 objc ,objc 写好后给 swift 调用也行
2. iOS 新建 APP 项目,就包含一个默认的可运行 APP ,之后你不用写界面,直接可以测试 SDK 了 3. 我没用过 fopen ,但沙河环境是只能打开沙河路径下的文件,不是不能打开文件。只要是沙盒目录下应该是可以打开的,你可以找一下怎么获取沙盒目录路径,然后测试一下。 |
3
YSLucida OP @zhangleshiye 谢谢回答
|
5
agagega 2022-07-31 12:11:55 +08:00 via iPhone
Swift 和 C++的 interop 社区有实验选项,但还不成熟,所以还是用 Obj-C 或者用 C 封一层吧( Swift 和 C 是可以 interop 的)
|
6
Building 2022-07-31 12:15:09 +08:00 1
不知道你要支持的 iOS SDK 专属的一些特性是指什么? Foundation, ARKit, UIKit 还是 SwiftUI 或者其他框架?
大体分为两种:有 UI 和没有 UI 没有 UI 直接新建 Command Line 就可以跑,随便玩,可以封装成框架,C, C++, OC, Swift 完全可以互相调用 但是要跑在 iPhone/iPad 上必须包含 UI 框架,这个时候,沙盒系统和开发环境就很不一样,需要判断设备环境分别处理,但是沙盒机制决定了 App 只能在自己的一亩三分地里面玩,要想访问其他文件是不可能的 |
7
Innovatino 2022-07-31 13:54:12 +08:00 1
1.初学者建议通过 OC 封装一层 C++的调用。因为 Swift 和 OC 是基本无缝的,OC 和 C++是无缝的,但是 Swift 和 C++是鸿沟
2.不能用纯 C++写,趁早放弃这个想法。如果只是验证 SDK ,那 1 天的简单学习就可以让你搭建一个原生 iOS App 的 SDK 调试环境 3.不能搞定这个问题,在 iOS 里安全是第一位的,没有什么办法打开沙盒外的路径。 |
8
YSLucida OP @agagega 那就可以,当然这里指的 c++其实指的就是 c 。而且一般默认说 c++和 其他语言互通一般指的就是 c 接口吧。
|
9
YSLucida OP 当然最终是要搞 UI 的,第一步就只是访问一下震动设备,让手机震动就行。
|
10
YSLucida OP @Innovatino 其实我指的纯 c++就是想暂时用 c++( POSIX 那部分)读取文件,入口和框架这些不用 c++也没关系的。
|
11
Innovatino 2022-07-31 15:03:01 +08:00 via iPhone
@YSLucida 那可以,我个人感觉没啥问题
|
12
okakuyang 2022-07-31 16:08:03 +08:00 1
1.swift 应该不能直接调用 c++,我记得是 swift->oc->c->c++ 这么个过程。
2.App 基础必须用 swift 或者 oc ,代码不是很多。 3.可以用 fopen ,但是你访问的文件必须是在沙盒中的,会有借口返回沙盒路径给你。类似于 char output[256]; strcpy(output,getenv("HOME")); strcat(output,"/Documents/"); |
13
icyalala 2022-07-31 16:53:39 +08:00 1
Swift 和 C++ 的交互目前没有成熟的方案,先不要考虑了。
OC 和 C++ 混编,只要把 OC 的 .m 文件改成 .mm 就可以嘞。简单调试的话,新建工程直接在 main 里面改就行。 文件访问的话,只要你访问的是沙箱路径下的内容,那些 POSIX 的 open fopen 之类的函数都正常用,Swift/OC 底层实际也是依赖这些函数的。 |
14
xtinput 2022-07-31 18:50:51 +08:00 1
swift 可以直接调用 C/C++的函数方法,桥接文件里面导入头文件就 OK
https://glumes.com/post/ios/swift-call-c-function/ |
15
xtinput 2022-07-31 18:52:16 +08:00
不对,C++的需要 OC 封装一层
|
16
YSLucida OP 谢谢大家的回答,能解决我大部分的疑惑。
|
17
yechentide 2022-07-31 22:25:15 +08:00 1
如果想打开沙盒外的文件,必须使用下面两个之一,来让用户选择文件。
uidocumentbrowserviewcontroller: 只能选择单个文件 uidocumentpickerviewcontroller: 可以选择文件夹 从用户那边获得访问权限后,你可以选择复制到自己 app 的沙盒里,或者直接编辑。 直接编辑沙盒外的文件,必须使用 Security-scoped URL 。 Security-scoped URL 可以保存为 bookmark ,这样下次启动 app 就不需要用户再次选择了 |
18
yechentide 2022-07-31 22:28:14 +08:00
UIDocumentBrowserViewController
UIDocumentPickerViewController |