ios静态库开发中的那些坑

本文介绍了解决iOS静态库在不同设备上编译失败的问题。主要原因是未正确设置架构选项导致不兼容。文中提供了具体的配置建议,包括更改BuildActiveArchitectureOnly设置和调整目标架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发静态库的时候,在自己这边真机和模拟器编译的时候好好的,一到客户那边就编译不了。经研究,原来是将“Build Active Architecture Only”设置成了YES,如果设置成YES,编译出来的库只能支持与自己真机或当前模拟器相同的架构,一到别人那边可能就不能编译了。


The issue is that the cocoapods have not been built for arm64 architecture yet thus they cannot be linked when you build them. Likely you cannot use those packages until they are updated and use that architecture. You can fix the linker error by going to project -> target (your project name) -> build settings and change architectures to standard architectures (armv7, armv7s), and valid architectures to armv7, armv7s.

Note though, this means you won't get the full power of the 64 bit processor. You said you are building for the 5s, so there may be some reason you need this. If you for some reason absolutely need that power (perhaps you are building a game), and desperately need those files, you could submit a pull request and then recompile the project to arm64 by setting those same fields to arm64 in the files you pulled from the open source projects. But, unless you really need these files to be 64 bit compatible, that seems like a bit of overkill for now.

EDIT: Some people also reported that setting Build For Active Architectures to YES was also necessary to solve this problem.

**********************

解决了我的问题

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

本文转载至 http://blog.youkuaiyun.com/forlong401/article/details/20059841

用Xcode提交市场的时候,报如下的错误:

ERROR ITMS-9000: "this bundle is invalid. armv7s are required to include armv7 architecture." at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

解决方法:

找到项目配置的架构Architecture部分,将“Build Active Architecture Only”里的Release设置为No(如果不是no的话,当你开着模拟器或者插着手机的时候,就只编译当前的cpu架构的版本),如图所示:


用xcode开发的库,默认都是动态库,而appStore又不允许上传动态库,因此上传的时候,需要将动态库转换为静态库,转换方法:


<think>嗯,用户的问题是关于微信小程序原生开发中播放本地视频的方法。根据引用内容和之前的聊天历史,用户明确要求使用原生开发方式,而不是第三方组件。先回忆一下小程序原生媒体组件的基础知识。小程序原生开发需要用到<video>组件,但官方文档特别强调这个组件默认只支持网络URL和临时文件路径。本地视频文件处理需要分情况讨论:对于静态资源,正确做法是把视频文件放在项目的本地目录(比如assets/videos/),然后在wxml中这样引用:```html<videosrc="{{localVideoPath}}"></video>```js里需要写:```javascriptPage({data:{localVideoPath:'/assets/videos/sample.mp4'//注意这个路径写法}})```但要注意!在真机测试时可能遇到路径问题,因为小程序包里的资源路径需要以绝对路径形式引用。如果涉及用户选择的本地文件,这里有个关键点:通过wx.chooseMedia获取的临时路径虽然以http://tmp/开头,但在真机调试时确实能播放。但实际部署时要注意,这个临时文件会被系统清理。需要的话应该用FileSystemManager.saveFile保存到本地缓存目录。用户提到"本地视频"可能有不同场景:1.打包在项目内的视频-用绝对路径直接播放2.用户选择的相册视频-用临时路径可播放但要考虑存储3.设备本地存储的视频-需要先通过wx.downloadFile下载到本地缓存所以得在回复里区分说明清楚。突然想到用户可能遇到的:安卓和iOS对视频格式的支持差异。比如iOS对H.264兼容性好,而安卓可能需要额外注意。最好在相关建议里补充兼容性提示。准备用分层的方式回答:1.基础方法-<video>组件的基本用法2.项目内视频实现3.用户选择视频实现4.缓存控制建议最后加个常见问题提示,特别是路径格式和权限处理。对了,引用[1]提到小程序资源加载效率,在播放本地视频时正好要利用这个优势,可以在总结时呼应这点。</think> 在微信小程序原生开发中播放本地视频,主要通过以下步骤实现: --- ### 一、基础播放方法 1. **使用 `<video>` 组件** 在小程序 WXML 文件中嵌入原生组件: ```html <video src="{{videoPath}}" controls autoplay></video> ``` 2. **指定视频来源** - **项目内视频**:将视频文件(如 `local.mp4`)放入项目目录(如 `/assets/videos`) ```javascript Page({ data: { videoPath: '/assets/videos/local.mp4' // 项目内相对路径 } }) ``` - **用户选择的本地视频**:通过 `wx.chooseMedia` API 获取: ```javascript wx.chooseMedia({ count: 1, mediaType: ['video'], success: (res) => { this.setData({ videoPath: res.tempFiles[0].tempFilePath }) } }) ``` --- ### 二、关键细节说明 1. **路径格式要求** - 项目内路径:以 `/` 开头的**绝对路径**(如 `/assets/xx.mp4`) - 临时路径:形如 `http://tmp/wx_xyz.mp4` 的临时文件路径 2. **用户操作流程** ```mermaid graph LR A[用户选择视频] --> B(调用wx.chooseMedia获取临时路径) B --> C{路径类型} C -->|项目内视频| D[直接使用绝对路径] C -->|设备本地视频| E[保存为缓存文件] E --> F[播放缓存路径] ``` 3. **缓存视频播放** 若需持久化播放设备本地视频,需先存入缓存: ```javascript const fs = wx.getFileSystemManager() fs.saveFile({ tempFilePath: '用户选择的路径', success: (res) => { this.setData({ videoPath: res.savedFilePath }) } }) ``` --- ### 三、完整代码示例 ```html <!-- WXML --> <video src="{{videoPath}}" controls height="400rpx"></video> <button bindtap="selectVideo">选择本地视频</button> ``` ```javascript // JS Page({ data: { videoPath: '' }, // 播放项目内置视频 onLoad() { this.setData({ videoPath: '/assets/videos/demo.mp4' }) }, // 选择设备视频 selectVideo() { wx.chooseMedia({ mediaType: ['video'], success: res => { this.setData({ videoPath: res.tempFiles[0].tempFilePath }) } }) } }) ``` --- ### 四、注意事项 1. **格式兼容性**: 支持主流格式(MP4/MOV/M4V),建议使用 **H.264 编码**保证跨平台兼容性[^1] 2. **文件大小限制**: 临时文件最大支持 **200MB**,超过需分片处理 3. **安卓权限**: 需在 `app.json` 声明权限: ```json "permission": { "scope.writePhotosAlbum": true } ``` 4. **组件属性**: 通过 `controls` 显示控制条,`autoplay` 自动播放,`loop` 循环播放 --- ### 五、性能优化建议 1. 首屏视频建议压缩至 **5MB 以内** 2. 长视频使用 `poster` 属性添加封面图 3. 对低端设备启用 `danmu-list` 弹幕功能时需谨慎 > 通过原生 `<video>` 组件实现本地播放,无需引入额外库,直接利用小程序内置能力即可完成核心功能[^1]。对于复杂需求(如多视频列表、自定义控制栏),可参考微信官方组件扩展方案[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值