在 iphone 应用程序中实现应用程序细化

Posted

技术标签:

【中文标题】在 iphone 应用程序中实现应用程序细化【英文标题】:Implement app thinning in iphone application 【发布时间】:2015-10-13 10:27:21 【问题描述】:

我的 ios 应用程序在应用商店中的大小相当大。我怎样才能降低达到app thinning 以使应用程序大小变小。

Note:-

    我已经在使用 Images.xcassets 来分别放置 x/2x/3x 图像。 我还阅读了此apple documentation 并负责优化级别构建设置。 我也在使用 8 位 PNG 而不是 32 位 PNG。

【问题讨论】:

【参考方案1】:

应用切片是currently not working,直至另行通知。目前减小应用程序大小的唯一方法是减少 .ipa 中包含的资产数量。

如果它们对您的应用有意义,您可以尝试使用 On Demand Resources。

【讨论】:

感谢分享有用的链接。我也在关注按需资源。让我在应用程序中再次交叉检查。 我尝试了按需资源并在我的项目中成功实施。我还在我的答案中分享了一个详细的答案和示例项目。谢谢你指导我。【参考方案2】:

从昨天开始搜索应用程序、位代码和按需应用程序资源,现在我调试所有这些东西并分享我在示例项目的帮助下从漂亮的apple documentation 获得的知识。

应用瘦身概念涵盖bit code 和按需资源。我将在下面详细讨论按需资源:-

iOS 中的按需资源:- 它会在需要时访问 images/videos/.h/.m/swift 文件 (Yes, on-demand resouring include source code files also)。

转到目标中的Resource tags 设置。 创建一个新的Tag。它将显示在“仅按需下载”下。 您可以在各种标签下添加 .h、.m、.xassest、.png 等。您还可以通过选择单个文件like this in file inspector来分配标签。

现在是编码部分(my favourite site):-

NSBundleResourceRequest *resourceRequest;


#pragma mark - On demand resource
-(void)getOnDemandResource
    NSSet *setOfTag = [NSSet setWithObjects:@"chair", nil];
    resourceRequest = [[NSBundleResourceRequest alloc]initWithTags:setOfTag];

    [resourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:^(BOOL resourcesAvailable) 
        if (!resourcesAvailable) 
//            resourceRequest.loadingPriority = 1;//set the downloading priority (0 - 1) , NSBundleResourceRequestLoadingPriorityUrgent

            [resourceRequest beginAccessingResourcesWithCompletionHandler:^(NSError * _Nullable error) 
                if (error) 
                    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error" message:error.debugDescription preferredStyle:UIAlertControllerStyleAlert];
                    [self presentViewController:alert animated:YES completion:nil];
                else
                    //// The associated resources are loaded
                
            ];
        else
            // The associated resources are available
        
    ];

在不使用的情况下结束访问按需资源(通常在游戏级别发生变化时)

#pragma mark - Remove access to on demand
-(void)endAccessToOnDemandResource
    [resourceRequest endAccessingResources];

NOTE:- 别忘了enable On_Demand_Resources in build setting。

EXAMPLE PROJECT:- I create a sample project and uploaded here:- [http://www.dropbox.com/s/edi5zj68a4wuguh/WebOnTab.zip?dl=0][6]

请不要为这个项目中的自动布局而烦恼。我的主要关注点是需求资源/应用程序。

总结:- 因此我们可以使用上述技术通过on-demand resourcing 实现app thinning。另请查看official documentation,其中还描述了有关tracking progresspriorities 的resourceRequests(NSBundleResourceRequest)。

【讨论】:

有谁知道如何检测点播资源下载后的位置?我正在尝试将它们用于我的游戏女巫不使用 xcasset 目录。我想下载纹理,然后将它们当作初始包的一部分使用,但我需要知道文件的确切位置。 我查看了苹果文档(developer.apple.com/library/prerelease/ios/documentation/…),但仍然找不到位置。所以我在 SO:***.com/questions/33824601/… 提出了这个问题【参考方案3】:

据我了解,App 瘦身是由 Apple 完成的。它会查看目标设备是什么,并自动将所需的图像和内容提供给用户。

如果您想获得更轻薄的应用程序,也许重构是您应该关注的主题。

【讨论】:

没错。它由 Apple 负责。但是正如我在我的问题中列出的那样,开发人员可能需要注意一些问题。您是否知道与按需资源相关的标记?

以上是关于在 iphone 应用程序中实现应用程序细化的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 应用程序中实现 HMAC 加密算法

如何在 iPhone 应用程序中实现半圆形按钮

如何在 iPhone 应用中实现手写识别功能?

如何在 iPhone 应用中实现 Facebook 和 Twitter 通知表

如何在 iPhone 应用中实现谷歌聊天

是否可以在 Google App Engine 应用程序中实现 iPhone 推送通知?