小编Mic*_*son的帖子

可以在运行时确定用于以编程方式构建二进制文件的iOS SDK版本吗?

啊,iOS 8 - 从iOS 7到很多意想不到的变化!

tl; dr:有没有办法在运行时以编程方式确定用于构建应用程序的iOS SDK版本(不使用预处理器宏)?

我正在努力为我维护的库(分布为预构建的静态库)进行一些窗口框计算,因为iOS 8改变了屏幕坐标系的工作方式.

两个初步观察,运行iOS 7的代码,iOS 8没有变化:

  1. 使用iOS 7 SDK构建并在iOS 8上运行时,一切都可以像以前一样工作,无需进行任何更改.
  2. 当使用iOS 8 SDK构建并在iOS 8上运行时,它已被破坏:需要对帧计算进行一些更改才能获得正确的定位.

因此,我们在条件打开时更改代码,[[UIDevice currentDevice] systemVersion]以便与新坐标系统一起正常工作.现在:

  1. 使用iOS 7 SDK构建并在iOS 7上运行时,一切正常.
  2. 使用iOS 8 SDK构建并在iOS 8上运行时,一切正常.

    但:

  3. 当使用iOS 7 SDK构建并在iOS 8上运行时,计算结束 - 请记住,当使用iOS 7 SDK构建时,在iOS 8特定代码更改之前一切正常.所以,所做的改变实际上破坏了东西.

现在,通常情况下,我可以通过SDK版本(#ifdef __IPHONE_8_0等等)上的一些宏条件解决这个问题.但我正在分发一个使用iOS 7 SDK构建的预构建静态库,因此这些条件中的代码永远不会进入.这就是为什么这是一个问题:

如果静态库是使用iOS 7 SDK构建的,但是链接到使用iOS 8 SDK构建的应用程序,那就像使用iOS 8 SDK构建静态库一样(因为链接发生在最终的应用程序编译阶段) , 当然).这意味着我需要在那里进行iOS 8更改,当应用程序使用iOS 8 SDK构建时 - 但是我不能使用宏条件来确定是否使用它们,因为C预处理器在iOS 7下的静态库构建.

所以,我的问题是这样的:有没有人知道我是如何能够确定应用程序构建是在运行时从预编译的静态库中使用iOS …

sdk xcode objective-c ios ios8

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

干线推送错误:“CocoaPods 干线无法访问您的 Pod 源代码”

我在将更新推送到 Pod (Audiobus) 时遇到问题。

“pod trunk Push”似乎成功验证(下载 git 存储库、构建等),但在使用 podspec 内容对 /api/v1/pods 进行 POST 时,会出现 403 Forbidden 错误,并显示以下消息:

“CocoaPods Trunk 无法访问您的 Pod 源代码。它是私人存储库还是位于 http 上的用户名/密码后面?”

我已验证我已注册(“pod trunk me”显示我已使用正确的电子邮件地址(该 pod 的所有者)登录)。

存储库曾经需要 HTTP 身份验证,但看到上述错误后,我禁用了身份验证。我已经验证现在可以通过从单独的未经身份验证的计算机克隆存储库来开放对 git 存储库的访问(git clone https://developer.audiob.us/download/SDK.git test --single-branch --depth 1 --分支 2.2)。

这是 trunk.cocoapods.org 中的错误吗?我缺少什么?

提前欢呼,

迈克尔

cocoapods

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

自动布局+缩放视图

直到iOS 8,自动布局使用缩放视图的变换尺寸,并在布局时考虑到该比例.因此,假设您对视图进行了0.5x变换,并将该视图设置为使用与另一个非缩放视图相同的尺寸 - 自动布局使这些视图保持相同的大小.好-O:

iOS 7的行为

从iOS 8开始,Auto Layout现在似乎忽略了变换后的尺寸,这意味着它在未变换的坐标系上执行布局并使东西看起来很奇怪 - 现在,通过缩小视图,我有大量的空白:

iOS 8的行为

所以; 我想知道是否有人对如何获得原始行为有任何想法?我想覆盖alignmentRectForFrame:和frameForAlignmentRect:并在那里提供转换值,但它们永远不会被调用.

有人还有别的吗?

干杯!

(供参考,这是展示问题的小Xcode项目)

constraints uiview ios autolayout

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

如何使用GLKView的帧缓冲区避免使用逻辑缓冲区存储?

在一个非常简单的应用程序上运行Xcode的OpenGL ES诊断,该应用程序切换到第二个帧缓冲区并返回(适当使用glClear和glInvalidateFramebuffer),在切换到第二个帧缓冲区时显示有关逻辑缓冲区存储的警告:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    // At this point, GLKView's framebuffer is bound

    // Clear (to avoid logical buffer load)
    glClear(GL_COLOR_BUFFER_BIT);

    // Invalidate (to avoid logical buffer store)
    glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 });

    // Switch to our own framebuffer, and attach a texture as the color attachment
    // At this point, Xcode's OpenGL ES tool warns:
    //  "For best performance keep logical buffer store operations to a minimum."
    glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texture, 0);

    // Clear (to …
Run Code Online (Sandbox Code Playgroud)

opengl-es ios glkit

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

标签 统计

ios ×3

autolayout ×1

cocoapods ×1

constraints ×1

glkit ×1

ios8 ×1

objective-c ×1

opengl-es ×1

sdk ×1

uiview ×1

xcode ×1