相关疑难解决方法(0)

检测是否正在从Xcode运行Swift应用程序

我想以编程方式确定iOS应用程序是否直接从XCode运行(在模拟器中或在系留设备上).我已经尝试了这里描述的-D DEBUG解决方案,但是当我从Xcode断开并重新运行应用程序时,它仍然认为它处于调试模式.我认为我正在寻找的是这个函数的Swift版本

#include <assert.h>
#include <stdbool.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/sysctl.h>

static bool AmIBeingDebugged(void)
    // Returns true if the current process is being debugged (either 
    // running under the debugger or has a debugger attached post facto).
{
    int                 junk;
    int                 mib[4];
    struct kinfo_proc   info;
    size_t              size;

    // Initialize the flags so that, if sysctl fails for some bizarre 
    // reason, we get a predictable result.

    info.kp_proc.p_flag = 0;

    // Initialize mib, which tells sysctl …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift

19
推荐指数
1
解决办法
2971
查看次数

Swift到Objective-C头文件不包含Swift类

我试图在Objective-C代码中使用Swift类,但是我的Swift类似乎没有出现在生成的头文件中.结果,我的构建失败了"使用未声明的标识符'HelloWorld'".

我使用模板创建了一个名为TestApp的项目.

我的目标中有以下构建设置:

  • 产品名称:TestApp
  • 产品模块名称:TestAppModule
  • 定义模块:是的

Apple的文档说要使用,#import <TestApp/TestAppModule-Swift.h>但这不起作用.

相反,我#import "TestAppModule-Swift.h"在我的".m"文件中使用.它似乎找到了这个.

我能够导航到它,它看起来像这样......

// Generated by Swift version 1.0 (swift-600.0.34.4.5)

#if defined(__has_include) && __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

...etc...
Run Code Online (Sandbox Code Playgroud)

但没有在那里定义的类.

我在项目中有一个Swift文件,看起来像这样......

class HelloWorld {    
    func hello() {
        println("hello world")
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这不使用标准头文件位置#import <TestApp/TestAppModule-Swift.h>

如何在头文件中获取我的swift类,这样我就不会得到"未声明的标识符"错误?

objective-c swift

17
推荐指数
4
解决办法
1万
查看次数

如何在swift中使用.a静态库?

我想在swift中使用我的webrtc .a静态库.你能帮帮忙吗?我读过你不能在swift中使用静态库,这是真的吗?

static-libraries ios webrtc swift

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

检查Swift中的网络状态

如何检查Swift中的网络状态?在Objective-C Reachability.h .m文件可用.现在怎么办?如何查看我是在线还是离线?

swift

16
推荐指数
3
解决办法
3万
查看次数

在现有的xcode项目上使用swift包管理器

我是swift和xcode世界的新手,所以我在尝试将软件包集成到我的项目时遇到了问题.

我想使用以下命令添加Alamofire依赖项:

在我的根项目文件夹中:

swift init
Run Code Online (Sandbox Code Playgroud)

这会创建Package.swift文件,我在里面添加依赖项,然后运行:

swift build
Run Code Online (Sandbox Code Playgroud)

一切似乎都没问题,但是当我尝试导入我的库时,我的项目是:

import Alamofire
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,它说该模块无法识别.所以我的问题是,在不崩溃所有内容的情况下,将Package Manager与对现有项目的依赖关系进行集成的正确步骤是什么.

更新:

swift build
Run Code Online (Sandbox Code Playgroud)

输出:

Resolved version: 4.3.0
Compile Swift Module 'Alamofire' (17 sources)
Compile Swift Module 'Sample' (1 sources)
Run Code Online (Sandbox Code Playgroud)

我的Package.swift是:

import PackageDescription

let package = Package(
    name: "Sample",
    dependencies: [
        .Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4)
    ]
)
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swift-package-manager

15
推荐指数
2
解决办法
6249
查看次数

如何在 Flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架

Flutter 插件中,我想在我用 swift 编写的 iOS 部分中使用Objective-C框架,然后在使用 Swift作为 iOS 语言的Flutter 项目中使用它。经过对它的一些研究(我不是 iOS 开发人员)我发现我想要做的事情是通过在文件中导入头文件作为swift 和 Objective-C 之间的桥接头文件来实现的,但是桥接头文件在颤振插件是自动创建的,如果use_frameworks!是在 Podfile 中定义的(据我所知),我不明白实际上是如何从 Objective-C(我认为是通过在 podspec 中定义一些东西,但我不知道)pod 中导入标头的。事实上,如果我尝试从 Objective-C pod 中导入一些东西,XCode 会抱怨(以及编译器),说它"doesn't find the module with name <framework name>"或它不能构建 Objective-C 代码。如果我尝试在 Objective-C 插件中使用该框架,我可以使用它,但前提是我use_frameworks! 从项目 Podfile 中注释掉

最后,我想知道是否可以在Swift插件中使用Objective-c外部框架来开发flutter插件。

objective-c ios cocoapods swift flutter

14
推荐指数
1
解决办法
876
查看次数

将Objective-c框架导入Swift框架项目

我正在构建一个框架,我需要导入一些objective-c框架,现在我需要导入"Beaconstac.framework",但因为我们无法在swift框架项目中添加桥接头,所以我的问题是如何使用它我的项目中的框架在我试过的项目中无法直接访问

进口Beaconstac

但它给出错误"没有这样的模块"

有没有替代方法呢?

objective-c ibeacon swift beacon

13
推荐指数
2
解决办法
9346
查看次数

制作混合的Objective-C和Swift框架

所以我开始将Swift添加到现有的Objective-C框架中.

坏消息是它做起来相当简单,看起来好像在起作用.这意味着我获得了Swift代码来查看obj-c类,甚至可以轻松地构建它们.我设置了一个桥接头添加了我需要它,更改了模块名称等,基本上一切都工作正常.

后来我意识到了一些事情.

首先,你不应该在框架中有一个桥接头.事实上,我试过一个测试项目,它不会让我.但是在我的实际项目中有人允许它.

它肯定会开始蠢蠢欲动.我认为因为它似乎包含了Swift生成的头文件中的桥接头,或者可能包含了如何导入伞头的其他内容.我得到了swift自动使用Umbrella标头的简单性,除了我需要另一个标头,原因有几个.

  1. 从框架内导入我不想成为公共框架头的私有头.
  2. 导入我们链接到的其他框架并需要访问公共头文件.我不想在这个框架的伞头中导入这些其他框架.

我在这种情况下面临几个问题.

外部目标无法使用加载此框架@import.我也无法直接导入框架的桥接头.这意味着我无法从另一个目标访问Swift代码.我写了一个访问者类,在这种情况下,这不是什么大问题.直到我意识到包含一个测试用例目标,所以如果没有在框架目标中的某种测试实现,我就无法有效地测试这些代码.即使我的测试目标中的快速测试也无法访问Swift.

有没有办法做到这一点?TL:DR"我可以拥有一个混合的Swift/Obj-c框架,它可以在外部访问Swift + Obj-c并保持其部分对象的私有性吗?"

macos frameworks objective-c ios swift

10
推荐指数
1
解决办法
1496
查看次数

创建一个分页的PDF-Mac OS X.

我正在制作Mac应用程序(在Swift 3中使用Xcode 8,Beta 5),用户可以使用该应用程序进行长注并将其导出为PDF.

要创建此PDF,我使用Cocoa的dataWithPDF:方法,使用以下代码:

do {
   // define bounds of PDF as the note text view
   let rect: NSRect = self.noteTextView.bounds
   // create the file path for the PDF
   if let dir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first {
        // add the note title to path
        let path = NSURL(fileURLWithPath: dir).appendingPathComponent("ExportedNote.pdf")
        // Create a PDF of the noteTextView and write it to the created filepath
        try self.noteTextView.dataWithPDF(inside: rect).write(to: path!)  
   } else {
        print("Path format incorrect.") // never happens to …
Run Code Online (Sandbox Code Playgroud)

pdf macos cocoa swift swift3

10
推荐指数
1
解决办法
2141
查看次数

Swift MultipeerConnectivity无条件崩溃DateComponentsBridgeFromObjectiveC

我有一个可重复的崩溃,以EXC_BREAKPOINT结尾,如下图所示:

MultipeerConnectivity崩溃

重现崩溃的步骤:

  1. 连接两个设备
  2. 开始使用FUNC sendResource转印(在resourceURL:URL,withName资源名称:字符串,toPeer的peerID:MCPeerID,withCompletionHandler completionHandler:?((错误) - >空隙)=无) - >进展?
  3. 通过调用func disconnect()断开启动传输的设备

编辑:通过调用Progress.cancel()来重现崩溃的另一种方法步骤:

  1. 连接两个设备
  2. 开始传输并存储Progress对象let progress:Progress = session.sendResource(...)
  3. 对进度对象调用取消,导致其他设备崩溃progress.cancel()

我在线上的代码didFinishReceivingResourceWithName:

func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?) {
    // transfer to local URL
    MusicDownloadRequestor.sharedInstance.finishReceivingSongUploadAtLocalURL(tempUrl: localURL)
}
Run Code Online (Sandbox Code Playgroud)

看起来我的代码在堆栈跟踪中看起来不像...

* thread #25: tid = 0x806ec, 0x0000000100944af4 libswiftFoundation.dylib`static Foundation.DateComponents._unconditionallyBridgeFromObjectiveC (Swift.Optional<__ObjC.NSDateComponents>) -> Foundation.DateComponents with unmangled suffix "_merged" + 96, queue = 'com.apple.MCSession.callbackQueue', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100944af4)
frame #0: 0x0000000100944af4 libswiftFoundation.dylib`static Foundation.DateComponents._unconditionallyBridgeFromObjectiveC …
Run Code Online (Sandbox Code Playgroud)

ios multipeer-connectivity swift

9
推荐指数
1
解决办法
1080
查看次数