小编Dro*_*ppy的帖子

从Swift命令行程序中使用NSURLSession

我想在将它集成到更大的应用程序之前测试一个小概念验证命令行应用程序.我要做的是使用NSURLSession使用此示例下载一些数据.但是,如果我使用简单OS X命令行应用程序中给出的示例,则应用程序会在检索数据之前退出.

如何使用NSURLSession从独立命令行应用程序下载数据?我读到的是使用NSRunLoop但是我还没有在Swift中找到一个明确的例子,所以如果NSRunLoop实际上是要走的路,那么任何例子都会受到赞赏.

从Swift命令行应用程序的URL下载数据的任何其他策略也是受欢迎的(无限循环?).

macos nsrunloop nsurlsession swift

26
推荐指数
3
解决办法
6480
查看次数

用NSTask启动的沙盒子进程无声地失败

我正在构建一个包含命令行可执行文件的OS X应用程序.应用程序调用可执行文件,传递用户选择的文件名,并使用管道获取输出.执行此操作的代码如下所示:

let bundle = NSBundle(forClass: self.dynamicType)
let binaryPath = bundle.URLForResource("myBundledBinary", withExtension: nil)
let task = NSUserUnixTask(URL: binaryPath!, error: nil)
let stdout = NSPipe()
let stderr = NSPipe()
task.standardOutput = stdout.fileHandleForWriting
task.standardError = stderr.fileHandleForWriting

task.executeWithArguments([filename], completionHandler: { (error) -> Void in
    let output = stdout.fileHandleForReading.readDataToEndOfFile()
    let error = stderr.fileHandleForReading.readDataToEndOfFile()
    let outputString = NSString(data: output, encoding: NSUTF8StringEncoding) ?? ""
    let errorReport = NSString(data: error, encoding: NSUTF8StringEncoding) ?? ""
    handler([outputString, errorReport], nil)
})
Run Code Online (Sandbox Code Playgroud)

这很好,直到我尝试沙盒应用程序.当这个代码在沙盒应用程序运行时,任务似乎完成,但没有在任stdout或stderr的任何输出(包括outputStringerrorReport为空字符串).不会生成错误(error始终为nil),并且不会发生控制台输出.

我的应用程序具有以下权利:

<key>com.apple.security.app-sandbox</key> …
Run Code Online (Sandbox Code Playgroud)

macos cocoa sandbox nstask swift

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

为什么不可能从Objective-C目标文件中隐藏符号?

我正在编写一个使用Objective-C的小型动态库,并将C链接功能公开给Unity(这是一个本机插件)。

即使我的编译器设置将“默认情况下隐藏的符号”设置为“ 是”,并且我正在使用__attribute__((visibility("default")))要公开的函数声明,即使static符号(函数和全局变量)也出现在输出库中。

我已经重新创建了一个测试Xcode项目,该项目最初包含一个C文件。

file.h:

#pragma once

extern __attribute__((visibility("default"))) void not_hidden();
Run Code Online (Sandbox Code Playgroud)

file.c:

#include "file.h"
#include <stdio.h>

static void hidden()
{
    printf("I'm hidden\n");
}

void not_hidden()
{
    printf("I'm not hidden\n");
    hidden();
}
Run Code Online (Sandbox Code Playgroud)

和这工作如广告:

$ nm libHiddenSymbolTest.dylib 
0000000000000f40 T _not_hidden
                 U _printf
                 U dyld_stub_binder
Run Code Online (Sandbox Code Playgroud)

但是,一旦我添加了具有类似功能的Objective-C文件(not_hidden2(),等),所有的static符号都会被公开:

$ nm libHiddenSymbolTest.dylib 
                 U _CFStringGetCStringPtr
                 U _NSLog
00000000000054d0 s _OBJC_METACLASS_$___ARCLite__
                 U __Block_copy
                 U __DefaultRuneLocale
0000000000005710 b __ZGVZL18add_image_hook_ARCPK11mach_headerlE7patches
0000000000005830 b __ZGVZL22add_image_hook_swiftV1PK11mach_headerlE7patches
0000000000005640 b …
Run Code Online (Sandbox Code Playgroud)

macos linker symbols objective-c

5
推荐指数
1
解决办法
2109
查看次数

Xcode 8 - 当用户点击背景时,键盘会消失

我过去曾经用过这个.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)     
{
    self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

但现在在Xcode 8 beta中我收到此错误:

声明touchBegan(touches:withEvent)具有与任何潜在覆盖不同的参数名称.

有什么想法吗?

beta xcode ios swift xcode8

5
推荐指数
1
解决办法
2495
查看次数

标签 统计

macos ×3

swift ×3

beta ×1

cocoa ×1

ios ×1

linker ×1

nsrunloop ×1

nstask ×1

nsurlsession ×1

objective-c ×1

sandbox ×1

symbols ×1

xcode ×1

xcode8 ×1