在我的iOS的cocoapod中,我有一个基本上的项目:
其中一个开源类调用,import <MyFramework.MyFramework.h>
因此它可以在其实现中使用MyFramework的组件.但正因为如此,我无法让podspec通过规范lint测试(pod spec lint MyCocoapod.podspec
).当我运行spec lint验证时,它说:
ERROR | [iOS] [xcodebuild] .../MyFile.h:54:9: fatal error: 'MyFramework/MyFramework.h' file not found
在调查时,我注意到podspec确实通过了规范lint验证,如果我删除podspec的source_files部分中的那个开源类,s.source_files = 'MyFiles.{h,m}'
.知道为什么我的类在规范lint验证期间无法导入我的自定义框架?
podspec中的相关代码如下所示:
s.preserve_paths = 'myframework/MyFramework.framework'
s.frameworks = 'Foundation', 'MyFramework'
s.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(SRCROOT)/myframework/' }
s.public_header_files = 'MyFramework.framework/Headers/*.h', 'SourceCode/*.h'
s.source_files = 'SourceCode/*.{h,m}' # Crashes here - Source_file imports MyFramework.h. If I take this out, it passes spec lint validation
Run Code Online (Sandbox Code Playgroud) 我正在开发一个可以选择使用闭源框架的开源项目.如果闭源框架包含在项目中,则会有其他功能.但是,如果框架未包含在项目中,则项目仍应正确编译.
如果框架包含在项目中,如何在编译时检查?
基本上,我想做这样的事情:
#ifdef _MY_FRAMEWORK_EXISTS
#import <MyFramework/MyFramework.h>
#endif
Run Code Online (Sandbox Code Playgroud)
我已经看过2年前的老问题,就像这个问题一样,但没有答案浮出水面,所以我现在可能会遗漏一些新东西.
我不想在运行时通过检查NSClassFromString()
,因为当我尝试导入时它将在编译时失败MyFramework
并且它不存在.
在构建一个objective-c静态库时,我注意到.a文件(来自模拟器和iPhone的胖文件)非常大.特别是,它最初是5.7mb.我发现这篇文章并将我的构建设置设置Generate Debug Symbols
为No,将lib大小减小到1.7mb.
这是一个很大的改进,但还有什么可以做的吗?实现和头文件单独占用~100kb.
我正在我的Xcode项目中构建一个框架.为了构建框架,我创建了一个聚合目标.该框架由静态库,头文件和.png资产包组成MyFrameworkResources.bundle
.当我构建聚合时,一切都已成功创建,并且bundle存在于Products目录中.
我的Xcode项目中还有一个目标应用程序.此应用程序用于测试框架产品(静态库,头文件和包).我已经添加了静态库和MyFrameworkResources.bundle
目标应用程序的目标依赖项.我还在MyFrameworkResources.bundle
目标应用程序的Build Phases中添加了Copy Bundle Resources.
我可以使用静态库中的所有文件,但是在尝试从bundle中加载资源时出现错误.这就是我从捆绑中加载资产的方式:
NSString *mainBundlePath = [[NSBundle mainBundle] resourcePath];
NSString *frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"MyFrameworkResources.bundle"];
NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];
NSLog(@"bundle: %@", frameworkBundle);
NSError *error;
[frameworkBundle loadAndReturnError:&error]; // <-- THIS RETURNS AN ERROR
NSLog(@"error: %@", error);
UIImage *image = [UIImage imageWithContentsOfFile:[frameworkBundle pathForResource:@"AnyImage" ofType:@"tiff"]]; // <-- EDIT, USE "tiff", NOT "png"
Run Code Online (Sandbox Code Playgroud)
当我记录捆绑包时,我得到了这个:
bundle: NSBundle/Users/my_comp/Library/Application Support/iPhone Simulator/6.1/Applications/blah-blah-blah/MyApp.app/MyFrameworkResources.bundle(尚未加载)
当我记录错误时,我得到了这个:
错误: 错误Domain = NSCocoaErrorDomain Code = 4"无法加载捆绑包"MyFrameworkResources",因为无法找到其可执行文件." UserInfo = 0x7535ee0 {NSLocalizedRecoverySuggestion =尝试重新安装捆绑包.,NSLocalizedFailureReason =无法找到捆绑包的可执行文件.,NSLocalizedDescription =无法加载捆绑包"MyFrameworkResources",因为无法找到其可执行文件.,NSBundlePath =/Users/my_comp/Library/Application Support/iPhone …
我有一个NSFetchedResultsController
主线程.同样从主线程,我异步发送JSON的网络请求.当JSON字符串返回时,我启动NSOperation
一个新的(后台)NSManagedObjectContext
,解析JSON字符串,创建/更新NSManagedObject
,并将它们保存在上下文中.后台上下文与主上下文具有相同的persistentStore.有了这个,我有两个问题:
我认为从任何上下文(在任何线程上)对持久性存储的任何保存都会通知主要NSFetchedResultsController
有变化,但到目前为止它没有发现任何变化.我应该做些什么来通知主线程NSFetchedResultsController
有外部save
的,以便相应的tableView
更新?
因此,在主线程上,我订阅NSManagedObjectContextWillSaveNotification
并正确查看所有上下文(包括完全在单独线程上存在的上下文)何时执行save
操作.的苹果文档说的是notification.userInfo
具有应3个阵列,一个阵列的每个在后台线程的"更新,删除和插入的"模型对象的字典.但是,这对我userInfo
来说总是如此nil
.我有什么想法我做错了吗?
订阅NSManagedObjectContextWillSaveNotification
AppDelegate:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(managedObjectContextDidSave:)
name:NSManagedObjectContextWillSaveNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
以及在AppDelegate中保存上下文的方法:
- (void)managedObjectContextDidSave:(NSNotification *)notification {
DLog(@"notification: %@", notification); //not nil
DLog(@"notification user info: %@", notification.userInfo); // always nil... why??
NSManagedObjectContext *theContext = notification.object;
if(theContext != context) {
DLog(@"---- SAVED ON ANOTHER CONTEXT");
// should I notify NSFetchedResultsController that there were …
Run Code Online (Sandbox Code Playgroud) multithreading core-data nsfetchedresultscontroller nsoperationqueue nsmanagedobjectcontext
ios ×4
objective-c ×4
xcode ×3
frameworks ×2
bundle ×1
cocoapods ×1
compile-time ×1
core-data ×1
png ×1