ResourceManager 1.3.0

ResourceManager 1.3.0

测试已测试
语言语言 Obj-CObjective C
许可 自定义
发布最新发布2015年6月

Sebastien Morel 维护。



  • Sebastien Morel

ResourceManager 允许您在您的 Mac 上同时编辑资源(无论是图像、声音、Nib、AppCoreKit 样式表或布局,甚至是字符串文件)时,同步设备或仿真器上运行的应用程序中的资源。通过它与多个具有不同形态或模式的设备同时连接一个或多个资源管理器,您可以看到在资产中制作的更改实时出现在您的设备上。这在团队合作中非常有用,当其他人正在工作时要保持最新的 UI,或者如果对同事不信任,可以仅将您的 Mac 与设备连接。

通过 ResourceManager 框架,结合 AppCoreKit 和几行代码,所有这些都是可能的。

它是如何工作的?

ResourceManager 是一个框架,旨在提高您开发 iOS 应用程序时的生产力。主要目标是同步多个资源库,并使用每个资源的最新版本。我们所说的资源是指您希望嵌入到应用程序中的所有内容,例如 图像、Nib、字符串文件、配置文件、JSON、AppcoreKit 样式表和布局、声音

ResourceManager 提供了类似于 NSBundle 的简单 API,可以从各种资源库中获取最新资源的路径。

仓库可以定义为包,也可以是一个与运行在Mac上的守护进程(daemon)的对等连接。资源管理器提供类似 NSNotificationCenter 的API来注册文件更新的通知。一旦文件在远程仓库中的一或多个仓库中保存,如果需要,这些文件会下载到应用程序的缓存目录,并发送通知告知应用程序更新。您还可以通过观察文件扩展名来获取文件添加和变更的通知。

在开发过程中应该使用此框架,您不希望在运行时因为文件更新而影响用户体验!您可以轻松地断开同步机制,但仍可以通过不设置共享RMResourceManager来使用API获取应用程序主程序包中的资源。

ResourceManager支持iOS 7及以上版本,以及以下架构:armv7、armv7s、arm64和i386(仅在模拟器中使用)。

示例用法

1. 初始化资源管理器

1.1. 通过网络与Mac同步资源

在您的应用程序代理中

#import < ResourceManager/ResourceManager.h >

- (id)init{
    self = [super init];

    RMPeerResourceRepository* peerRepository = [[RMPeerResourceRepository alloc]init];
    RMResourceManager* rm = [[RMResourceManager alloc]initWithRepositories:@[peerRepository]];
    [RMResourceManager setSharedManager:rm];

    //Do your stuff
}

在您的Mac上

我们提供了一个名为RMPeerDeamon的mac应用程序,它扫描指定文件夹中的资源变更。要运行此应用程序,您可以在终端将其构建为命令行工具。

命令行需要指定要监视的目录以及与这些资源相关联的应用程序捆绑标识符。

示例

open ~/RMPeerDeamon.app -directory "MyProjectFolder/Resources" -bundle-identifier "com.mycompany.myapp"

1.2. 从您的XCode项目的目录(只在模拟器中运行)同步您的资源

在您的目标plist中

添加一个键为"SRC_ROOT",值为"$SRCROOT/$PROJECT/"的字符串条目

在您的应用程序代理中

#import < ResourceManager/ResourceManager.h >

- (id)init{
   self = [super init];

    //Comment or remove the following code when you want to deactivate the sync mechanism
    NSString* projectPath = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"SRC_ROOT"];
    RMBundleResourceRepository* lr = [[RMBundleResourceRepository alloc]initWithPath:projectPath];
    lr.pullingTimeInterval = 1;

    RMResourceManager* rm = [[RMResourceManager alloc]initWithRepositories:@[lr]];
    [RMResourceManager setSharedManager:rm];

    //Do your stuff
}

2. 将所需的回调传送到资源管理器

在您的应用程序代理中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    //Do your stuff ...

    //After :
    [self.window makeKeyAndVisible];

    [RMResourceManager handleApplication:application 
           didFinishLaunchingWithOptions:launchOptions];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
                                       sourceApplication:(NSString *)sourceApplication 
                                              annotation:(id)annotation {

    [RMResourceManager handleApplication:application 
                                 openURL:url];

    //Do your stuff
}

3. 获取资源最新路径

NSString* resourcePath = [RMResourceManager pathForResource:@"MyResource" 
                                                     ofType:@"myExtension"];
//Load the resource here using the "resourcePath" ...

4. 当资源更新时接收通知

[RMResourceManager addObserverForPath:resourcePath 
                               object:self 
                           usingBlock:^(id observer, NSString *path) {
    //Load the resource here by using the last updated "path" ...
}];

由于管理器在对观察者对象保持一些弱引用,因此当需要时或至少当对象(此处为"self")被回收时,您必须从资源管理器中注销。

[RMResourceManager removeObserver:self];

5. 获取具有特定扩展名的资源最新路径

NSArray* paths = [CKResourceManager pathsForResourcesWithExtension:@"mp3"];
//Do something with those files

6. 当这些资源更新或添加具有指定扩展名的文件时接收通知

[CKResourceManager addObserverForResourcesWithExtension:@"mp3" 
                                                 object:self 
                                             usingBlock:^(id observer, NSArray *paths) {
    //Do something with the up to date paths for all mp3 files.
}];

对于单个路径观察,不要忘记注销您的观察者。

安装

安装ResourceManager的推荐方法是使用CocoaPods包管理器,因为它提供了灵活的依赖关系管理,和使用方法简单。为了最佳结果,建议您使用CocoaPods >= 0.19.1安装,这需要通过Homebrew安装Git >= 1.8.0

作为框架

在自己的应用程序中使用ResourceManager(预编译格式)

您可以通过https://github.com/smorel/appcorekit-samples示例仓库找到ResourceManager的预编译版本和样本集成。

  • 将以下框架和库依赖项添加到您的项目构建阶段的设置中:

    Foundation.
    Security, 
    QuartzCore,
    CFNetwork,
    SystemConfiguration.
    
  • 在您的构建设置(OTHER_LDFLAGS)中添加以下链接标志

    -ObjC -all_load -weak_library /usr/lib/libstdc++.dylib
    

编译框架

ResourceManager是作为静态框架构建的。Xcode 5或更早版本原生不支持静态框架,并且需要额外的配置才能正确编译。如果使用Xcode 6或更高版本,您可以跳过此设置。

复制以下文件:

./static Frameworks.xcspec

到:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications

并且:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications

重要:每次您升级到Xcode的新版本时,都需要复制此文件。

在您自己的App中使用ResourceManager(源代码)

  • 将ResourceManager项目拖放到Xcode作为子项目

  • 在构建阶段设置中,将ResourceManager.framework添加到您的目标链接依赖中。

  • 将以下框架和库依赖项添加到您的项目构建阶段的设置中:

    AppPeerIOS, (that can be found in this repository) 
    Foundation,
    Security, 
    QuartzCore,
    CFNetwork,
    SystemConfiguration.
    
  • 在您的构建设置(OTHER_LDFLAGS)中添加以下链接标志

    -ObjC -all_load -weak_library /usr/lib/libstdc++.dylib
    

编译API文档

ResourceManager提供了一个“文档”目标,该目标使用公共头文件和Documentation文件夹中的额外编程指南生成一个docset。这个目标是基于“appledoc”的脚本。要安装appledoc,请遵循以下安装程序:[请点击这里获取安装程序](https://github.com/tomaz/appledoc)

完全集成到AppCoreKit中

它已被设计为可以直接更新到您的设备,而不仅仅是模拟器,就像它在AppCoreKit中之前实现的那样。对AppCoreKit进行了一些更改,以便将其作为弱依赖项和非常有效的方式完全集成到这个新框架中。AppCoreKit提供了自动重新加载样式表和布局、图像、映射、模拟、本地化文件(.strings)的机制,并作为结果更新UI。前往AppCoreKit的GitHub存储库并获取master分支来尝试集成。

https://github.com/smorel/AppCoreKit

致谢

如果您有任何评论、建议、问题或信息请求,请通过以下邮箱联系我们的团队:[email protected]

许可证

本软件采用Apache License,版本2.0(“许可证”),除非在许可证下使用,否则严禁使用此文件。您可以在以下位置获取许可证的副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非法律规定或书面同意,否则根据许可证分发的软件按照“现状”基础分发,不提供任何明示或暗示的保证或条件。有关许可证管理的具体语言、权限和限制,请参阅许可证。