Phonegap - 资产和通用 iOS 应用程序

Posted

技术标签:

【中文标题】Phonegap - 资产和通用 iOS 应用程序【英文标题】:Phonegap - assets and universal iOS apps 【发布时间】:2012-12-13 17:23:38 【问题描述】:

我目前正在为 iPhone、iPad、android 手机和 Android 平板电脑构建应用程序。

我正在使用来自this example 的单一代码库。

但是由于我的项目也支持平板电脑,所以我的项目有点复杂,我希望排除在安装应用程序的设备上未使用的资产。

为了澄清,我的项目文件/文件夹结构如下所示:

项目根目录:

html (html, JS, Css, android & ios 项目的图片) CSS style.css style-android-phone.css style-android-tablet.css style-ios-phone.css style-ios-tablet.css 图片 共享 [...] 电话 [...] 平板电脑 -[...] js [...] 模板(=html 模板) 电话 [...] 平板电脑 [...] android(日食项目) 资产 www(../../html 的符号链接) 斌 [...] 基因 [...] 库 [...] 资源 [...] 源 [...] [...] ios(xcode 项目) 科尔多瓦库 [...] 我的项目 类 [...] 插件 [...] 资源 [...] [...] My_project.xcodeproj www(../../html 的符号链接)

例如,我不希望 iphone 应用包含以下平板电脑资产: html/css/style-android-tablet.css, html/css/style-ios-tablet.css, html/images/tablet/, html/templates/tablet/

目前,由于无用的资产(主要是图片),该应用在 iphone 上的使用量很大(例如)。

我尝试了一些想法,例如: - 在 xcode 项目中使用 2 个标记。一个用于iphone,一个用于ipad。但是 xcode 中 www 下的文件和文件夹无法设置为目标成员。只有www可以。 - 使用 2 个 www 目录和 2 个目标,但 iphone 目标仍然包括目标 ipad 的 www。

我认为this solution 可以帮助我,但我真的不明白如何使其适应我的文件结构。

因此,我请求您的帮助,为未来(下一个项目和现有项目的发布)找到最佳和更简单的解决方案。

提前感谢您的帮助。

干杯。

【问题讨论】:

【参考方案1】:

这是我过去用于在 Android 和 iOS 之间共享资源的方法:

http://www.tricedesigns.com/2012/02/16/linked-source-files-across-phonegap-projects-on-osx/

您可以使用这种精确的技术来拥有共享代码库,但也可以拥有特定于平台的文件。只需将文件夹添加到 www 目录(而不是共享目录),然后将特定于平台的 CSS 文件放入其中。 注意:在这种方法中,www 的子文件夹是符号链接的,而不是 www 的父文件夹。

在设备外形尺寸之间有单独的 CSS 文件有点棘手...

一种选择是在应用程序初始化期间使用 javascript 有条件地附加

另一种选择是包含所有内容并使用 CSS 媒体查询。

如果您使用的是通用二进制文件(同时针对手机和平板电脑的外形尺寸),那么您必须在应用中同时包含手机和平板电脑的 CSS。您可以使用 CSS 媒体查询,以便 CSS 样式仅应用于特定的设备外形尺寸。因此,将您的平板电脑样式包装在媒体查询中,它们只会应用于平板电脑的外形尺寸。

您可以在此处阅读有关 CSS 媒体查询的更多信息:

https://developer.mozilla.org/en-US/docs/CSS/Media_queries

您可以在此处访问针对常见设备外形的预定义 CSS 媒体查询:

Media Queries: How to target desktop, tablet and mobile? http://css-tricks.com/snippets/css/media-queries-for-standard-devices/

如果您不使用通用二进制文件,则每个设备类别都需要单独的项目环境。在每个单独的项目中,您可以符号链接到共享代码库,并带有指向 CSS 文件的静态路径。

如果您想有条件地将特定的 CSS 文件插入到特定的项目配置中,那么您需要为每个项目配置单独的项目,或者您需要编写一个脚本来为您完成。

希望对您有所帮助...

【讨论】:

感谢您的回答安德鲁。我们已经根据设备类型(使用 javascript)处理 css 负载。但我的问题更多是关于排除 tablet images 以包含在 iphone 的安装中,例如。我们的手机版应用在 IOS(~9Mo)上已经很重了。所以我不希望一旦将平板电脑部分添加到项目中,尺寸会增长到~30Mo,而没有使用 20Mo。 我使用与您相同的方法在 Android 和 iOS 之间共享资源(我认为,我会按照您的教程进行操作)。但这种方法只能解决跨操作系统(Android 和 IOS)的分离或共享资源问题,但不能解决同一操作系统下的设备类型。我认为对于 Android,我可以扩展这种方法,因为 Google Play 允许为同一个应用上传 2 个不同的版本(一个目标手机,另一个目标平板电脑)。但是在 IOS 上使用这种方法(2 个带有符号链接的 IOS 项目)将迫使我在 App Store 中管理 2 个应用程序。我会链接以避免这种情况。 使用 iOS 的通用二进制方法,很遗憾您别无选择。如果您希望它在两种形式的应用程序存档中,那么资产必须在其中。我能想到的唯一选择是您可以从服务器中提取 UI 元素并在需要时保存在本地(HTML5 缓存或写入本地文件系统)。这将减少 IPA 文件的大小,但需要在首次使用时下载资源。

以上是关于Phonegap - 资产和通用 iOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Cordova / Phonegap 和 iOS 8.1 库路径

在 iOS Phonegap 应用程序上序列化文件传输

维护 PhoneGap 混合/Web 应用程序代码库

iOS通用屏幕设计

App是通用的,但是资产管理器中的AppIcon没有空间放iPad图标

从资产中获取实际图像名称