小编ale*_*nca的帖子

Swift框架取决于可可豆荚

使用最新版本的可可豆荚(0.36),我能够将swift(例如Alamofire)中的可可豆荚嵌入我的快速项目中.现在我将自己的自定义框架引入到项目中,该框架也希望依赖于Alamofire.

为了实现这一点,我所做的是选择将pods框架添加到我的框架作为依赖:

为我自己的嵌入式Swift框架(Swift模块)选择Target,在"Linked frameworks and libraries"的"General"选项卡中,我将"Pods.framework"添加为"Required".

但是,这还不足以编译,因为我自己的swift框架中的类不能"导入Alamofire",因为它不被认为是"可用框架".

将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架的目标的配置中,换句话说,更改构建设置以执行所有更改,可可豆荚对我的构建设置执行iOS App目标,解决了这个问题.

它现在构建没有问题.它也在模拟器中运行没有问题,我自己的嵌入式swift框架成功地使用了由cocoa pods添加的框架.

但是,如果我在设备上运行相同的程序,它会毫无问题地进行编译和安装,但在启动时会出现致命错误:

dyld: Library not loaded: @rpath/Pods.framework/Pods
Referenced from: /private/var/mobile/Containers/Bundle/Application/32D2F1F8-679F-4A5F-8159-28F1C800D0C6/TestingFrameworks.app/Frameworks/mySwiftFramework.framework/mySwiftFramework
Reason: image not found
Run Code Online (Sandbox Code Playgroud)

显然,并非cocoa pods xcconfig文件中的所有设置都适合添加到我的自定义swift框架的构建设置中.

但为什么它在模拟器中工作呢?更重要的是构建设置是什么,我需要纠正?

对我来说,我似乎需要更改此构建设置:

PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods
Run Code Online (Sandbox Code Playgroud)

别的......

ios cocoapods swift

26
推荐指数
2
解决办法
1万
查看次数

iOS7自定义ViewController转换和顶部布局指南

我在我的App中实现了一个自定义的UIViewController Transition,它取代了推送动画中内置的导航控制器.

到目前为止一切都有效,除了新推出的视图控制器中的toplayoutguide为0,尽管新视图控制器从旧视图控制器继承了导航栏.它应该是64.0(状态栏高度+导航栏高度),现在它是0.0.因此,附加到故​​事板中顶部布局指南的所有对象现在显示为64点太高(在半透明条下方).

当我禁用自定义视图转换时,顶部布局指南将具有预期值.我试图"遍布整个地方"调用layoutSubviews和updateConstraints.在视图控制器以及导航控制器中.

据我所知,navigationcontroller(parentviewcontroller)应更新新视图控制器的toplayoutguide,但显然我在自定义转换代码中遗漏了一些内容,这会触发更新为toplayoutguide的正确值.

这是我的自定义转换代码,它是一个设置为navigationcontroller委托的对象:

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
    return 0.7;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIView *animationContainerView = [transitionContext containerView];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView *toView = [toVC view];
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIView *fromView = [fromVC view];

    CGRect endFrame = [transitionContext finalFrameForViewController:toVC];
    CGRect startFrame;

    startFrame = CGRectOffset(endFrame, 0, endFrame.size.height);

    if (self.operation == UINavigationControllerOperationPop) {
        [animationContainerView insertSubview:toView belowSubview:fromView];
        [toView setFrame:endFrame];
    }
    else{
        [toView setFrame:startFrame];
        [animationContainerView insertSubview:toView aboveSubview:fromView];
    }

    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:0.7 initialSpringVelocity:0.8 options:UIViewAnimationOptionBeginFromCurrentState animations:^{

        if (self.operation …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios ios7

25
推荐指数
2
解决办法
7200
查看次数

swift扩展中的类函数(类别)

是否可以在swift中的扩展中定义类函数,就像在Objective-C类中一样,您还可以定义类函数?

objective-c中的示例

@implementation UIColor (Additions)

+ (UIColor)colorWithHexString:(NSString *)hexString
{
    // create color from string
    // ... some code
    return newColor;
}

@end
Run Code Online (Sandbox Code Playgroud)

swift中的等价物是什么?

ios swift

14
推荐指数
2
解决办法
2万
查看次数

在Swift中使用Restkit

我试图在我的基于Swift的项目中使用RestKit.我似乎无法使用Swift原始数据类型,如Int,Double,Bool等,除了String,Array和Dictionaries(可能是因为它们是免费的桥接到NSString, NSArray和NSDictionary)

使用objective-c,我可以将对象中的属性定义为作为属性的基本数据类型,这些属性已分配.在Swift中,我只能使用对象(String,NSNumber,Array,Dictionary),否则应用程序会崩溃"setValue:forUndefinedKey:此类与密钥aBool不符合密钥值编码".

示例:这是我的对象在Objective-C中的样子:

@interface TestObject : NSObject

@property (strong, nonatomic) NSString *aString;
@property (assign, nonatomic) BOOL aBool;
@property (assign, nonatomic) CGFloat aFloat;

@end
Run Code Online (Sandbox Code Playgroud)

和Swift中的"等价物":

class TestObject:NSObject {

    var aString:NSString?
    var aBool:Bool?
    var aFloat:Double?

}
Run Code Online (Sandbox Code Playgroud)

崩溃,虽然我明白为什么它会崩溃,我想知道,是否有另一种解决方法,而不是使用NSNumber for Booleans,Integers和Floats,就像它在Objective-C中一样?

(如果任何RestKit开发人员正在阅读此内容:首先感谢您的工作,然后:是否有关于Swift支持/端口到Swift的计划?)

restkit swift

7
推荐指数
1
解决办法
1487
查看次数

在swift模块中使用依赖(框架)

我试图在可可豆荚设置的环境中创建一个带有可重用代码的swift模块(Cocoa Touch Framework),其中包括用Objective-C编写的第三方库(即Restkit).不幸的是,我无法在我创建的模块中使用Restkit.

这是我创建模块所做的:

  1. 文件 - >新目标:Cocoa Touch Framework,语言:Swift,项目:MyProject,嵌入应用程序:MyProject

  2. 在"配置"部分的项目设置的"信息"选项卡中,我为新创建的目标定义了Pods.debug和Pods.release xcconfig文件.

  3. 在头文件中,Xcode为我自动创建了networkModule.h,我添加了以下行:

    #import <RestKit/RestKit.h>

结果:在尝试编译时,我得到错误"在框架模块'networkModule'中包含非模块化头"

我已在项目目标和模块/框架目标的构建设置中将"允许框架模块中的非模块化包含"标记设置为"是".

我去了Cocoa pod项目并尝试将RestKit.h头文件的可见性设置为目标成员中的"Public"(这当然不是解决可可pod环境的好方法)

我无法编译.我仍然得到同样的错误.

是否有可能首先创建一个依赖于cocoa pod托管框架的Cocoa Touch Framework?

顺便说一句.我创建一个私人可可豆荚的第一个想法也没有成功,因为它似乎没有得到支持,尽管我正在使用可可豆荚0.36的预发布,支持swift.

xcode frameworks ios cocoapods swift

6
推荐指数
1
解决办法
2101
查看次数

为什么daltoniam Skeets提议将NSDocumentDirectory作为缓存文件的位置

在Skeets的文档中,一个用swift for iOS/MacOS编写的图像加载器/缓存框架,一个例子展示了如何指定缓存路径.

//set the cache directory. Only have to do this once since `sharedManager` is a singleton
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
ImageManager.sharedManager.cache.diskDirectory = "\(paths[0])/ImageCache"
Run Code Online (Sandbox Code Playgroud)

直到现在我的理解是,文档目录(及其子目录)不是存储缓存数据的正确选择,它甚至导致应用程序审核过程失败,因为文档目录被备份到iCloud缓存数据没什么,我们真的想在云中备份.

当然,除非我们明确地从iCloud备份中排除我们指定的目录.

我以为NSSearchPathDirectory.CachesDirectory将是存储缓存数据的适当位置?

caching ios swift

5
推荐指数
0
解决办法
107
查看次数

标签 统计

ios ×5

swift ×5

cocoapods ×2

caching ×1

frameworks ×1

ios7 ×1

iphone ×1

objective-c ×1

restkit ×1

xcode ×1