草庐IT

oc_product

全部标签

ios - Xcode build设置 "Build Products Path"(CONFIGURATION_BUILD_DIR) 是个谎言?

如果我创建一个新的应用程序项目,build设置如下所示:它声称正在使用构建目录build/Debug-iphoneos。我假设这是相对于项目目录?实际上,该项目被编译到“派生数据”目录,位于~/Library/Developer/Xcode/DerivedData/CryptoTest2-abc...下那么这里发生了什么?这个build设置是否被忽略了?控制输出目录的build设置是什么? 最佳答案 此build设置实际上是相对于派生数据设置而言的。如果转到Xcode>首选项>位置,则可以更改此设置,并将派生数据目录设置更改为适合您

OC分类(category)和扩展(extension)

首先,分别来说下分类(category)和扩展(extension)的用处。然后来解读一下分类的底层实现分类常见的应用1、可以将臃肿的类根据不同业务划分为多个模块,方便进行管理2、对原有的类进行扩展,给类添加方法。特别是给系统自带的类方法分类的注意点1、分类里面可以定义@property属性,但是不会自动生成set和get方法,以及对应的成员变量2、分类不能添加成员变量,但是可以通过关联对象的方式添加成员变量3、分类中有和原有类同名的方法,会优先调用分类中的方法4、多个分类中同名方法,优先调用后面参与编译的分类里面的方法扩展的应用1、为一个类声明一些额外的方法和属性2、常用在.m文件中添加一些

OC方法交换swizzle详细介绍——不再有盲点

原文链接:https://www.jianshu.com/p/e95ca2e14731如果对方法交换已经比较熟悉,可以跳过整体介绍,直接看常见问题部分整体介绍方法交换是runtime的重要体现,也是"消息语言"的核心。OC给开发者开放了很多接口,让开发者也能全程参与这一过程。原理oc的方法调用,比如[selftest]会转换为objc_msgSend(self,@selfector(test))。objc_msgsend会以@selector(test)作为标识,在方法接收者(self)所属类(以及所属类继承层次)方法列表找到Method,然后拿到imp函数入口地址,完成方法调用。typede

深入理解OC的运行时(Runtime)

序(吐槽)  前段时间刚面试了几人,面试过程中遇到了比较让人尴尬的问题,这里先吐槽一些:技术层面(部分) 1.runtime方面,网上的runtime文章基本都是千篇一律的,很多都是死记硬背为了应付面试,没有实质性的东西;其实也不是说听不进去,针对于个人来说,runtime其实是一种编程思想,是动态多态的一种实现机制,所以想听到的更多的是关于自己对语言的独特见解,个人看来这十分重要,可能是以后在IT领域所能达到的高度 2.设计模式方面,不会不要紧,因为这本身就是个经验活,这里多插一句,本人看来,设计模式这个东西脱离不了语言特性,这可能与大部分人的见解是北道而驰的,但我不是否定编程思想,只是有些

ios - 未设置触发器 $XCS_PRODUCT 后持续集成 Xcode Server

我有一个在Xcode6.4下完美运行的机器人。触发后脚本使用此路径自动上传IPA:“$XCS_OUTPUT_DIR/$XCS_PRODUCT”但是(即使从头开始重做一个机器人之后)看起来:$XCS_PRODUCT始终为空。$XCS_OUTPUT_DIR指向一个不存在的文件夹,因为在服务器上checkout后,Xcode服务器似乎将.ipa存储在那里:/Library/Developer/XcodeServer/IntegrationAssets/如何在触发后脚本中找到没有此变量的.ipa? 最佳答案 我遇到了同样的问题,经过讨论Ap

ios - target 指定产品类型 'com.apple.product-type.watchkit2-extension' ,但是 'iphonesimulator' 平台没有这样的产品类型

当我尝试运行我的项目时弹出此错误目标指定产品类型'com.apple.product-type.watchkit2-extension',但'iphonesimulator'平台没有这样的产品类型我不知道该怎么办,请帮忙。 最佳答案 在我的例子中,当我使用xcode7添加watchkit扩展时,大多数事情都没有问题。但是扩展的调试目标是iOS。所以当我在调试/模拟器中运行时,我得到了这个错误。我必须将它们更改为WatchOS。并解决。选择Project>Targets>SupportedPlatform>Debug>watchOS(

运行flask报WARNING: This is a development server. Do not use it in a production deployment.

运行flask程序,报:WARNING:Thisisadevelopmentserver.Donotuseitinaproductiondeployment.解决方案一,使用PyWSGI1. 下载gevent包:在控制台输入:pipinstallgevent2.修改flask启动代码:fromgeventimportpywsgiif__name__=='__main__':server=pywsgi.WSGIServer(('0.0.0.0',5000),app)server.serve_forever()解决方案二,虽然PyWSGI服务器相对轻量并且易于设置,但许多人更倾向于使用像Gunic

iOS开发之OC和swift互相调用

一、OC调用swift文件这里创建一个名为Test的OC项目在OC项目中创建一个swift文件Person.swift,会提示是否创建桥接文件。这个桥接文件是用于swift调用OC的,可以创建,若不创建则后续手动创建也是可以的。编译器会为我们自动创建一个隐藏的Test-swift.h文件。1、只要在OC文件里引入这个文件就可以使用swift文件。2、这个文件名称默认是:ProductModuleName-Swift.h。3、如果不希望使用默认名称,也可以自定义,在BuildSettings中找到Object-CGeneratedinterfaceHeaderName,这里可以自定义用于引入的s

OC中的链式编程

今天看到项目里边有一段代码[BAFRequestrequest].setBaseURL(host).setPath(path).setRequestSerializerType(RequestHTTP).setRequestType(BAFRequestTypeAPI).setMethod(MethodType).setParams(finalParams)-(BAFRequest*(^)(NSString*baseURL))setBaseURL;第一眼看上去感觉有点蒙,返回的是一个block,为什么可以直接去请求下一个方法呢?其实细心地朋友已经发现了,Masonry的布局使用的就是这种编程方

OC 底层(KVC、KVO、Delegate、Category、Extension、通知)

目录1.KVC2.KVO3.通知4.代理、委托、协议5.Block、KVO、通知、代理之间的区别6.分类Category和类扩展Extension7.类方法、实例方法、构造方法1.KVC概念:KVC(Key-ValueCoding)键值编码,是一种可以直接通过字符串类型的属性名key来访问或赋值某个类属性的机制,而不是通过调用Setter、Getter方法访问。这样就可以在运行时动态地访问和修改对象的属性,而不是在编译时确定,这也是iOS开发中的黑魔法之一。它是利用NSKeyValueCoding非正式协议实现的一种机制,对象采用这种机制来提供对其属性的间接访问。说明:1.写下KVC代码并点击