将 Swift 文件添加到应用程序的资源包时遇到问题
Trouble adding a Swift file to an app's Resource Bundle
对于我的应用程序,我需要能够直接从应用程序发送带有各种类型附件的电子邮件。我找到了一些解决方案并进行了测试。
如果我尝试从我的应用程序发送 .zip 或 .txt 文件,它运行良好。但是我无法发送“.swift”类型的文件。有人知道它是如何工作的吗?
这是我的代码:
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
var EmailTxt = ""
override func viewDidLoad() {
super.viewDidLoad()
setEmailTxt()
sendEmail()
view.backgroundColor = UIColor.lightGray
}
func sendEmail() {
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["sgamesro@gmail.com"])
mail.setMessageBody(EmailTxt, isHTML: true)
mail.setSubject("test email")
if let filePath = Bundle.main.path(forResource: "test", ofType: "swift") {
print("# File path loaded.")
if let fileData = NSData(contentsOfFile: filePath) {
print("File data loaded.")
mail.addAttachmentData(fileData as Data, mimeType: "swift", fileName: "test.swift")
}
}
present(mail, animated: true)
} else {
// show failure alert
print("# func sendEmail() Mistake")
}
}
func setEmailTxt() {
EmailTxt = "<p>test line 01</p> <p>test line 02</p>" //<p>This is some text in a paragraph.</p>
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true)
}
}
这里有一些问题。 Xcode 不喜欢将 .swift 文件放入资源包中。
第一个明显的修复是转到 "Build Phases" 下的 "Copy Bundle Resources" 部分为您的目标添加 .swift 文件。
这种作品。但它不会复制原始 .swift 文件,它会复制两个与 .swift 文件的编译版本关联的相关文件。
并且似乎没有办法阻止 Xcode 编译 Swift 文件,即使它没有在 "Build Phases" 的 "Compile Sources" 部分下列出=].
我会这样做:
将应用程序包中所需的 .swift 文件重命名为 .swiftx 以获取其他类似的字段扩展名。确保文件在 "Copy Bundle Resources".
下的列表中
然后将您的代码更新为:
if let fileURL = Bundle.main.url(forResource: "test", withExtension: "swiftx") {
print("# File path loaded.")
if let fileData = Data(contentsOf: fileURL) {
print("File data loaded.")
mail.addAttachmentData(fileData, mimeType: "text/plain", fileName: "test.swift")
}
}
对于我的应用程序,我需要能够直接从应用程序发送带有各种类型附件的电子邮件。我找到了一些解决方案并进行了测试。
如果我尝试从我的应用程序发送 .zip 或 .txt 文件,它运行良好。但是我无法发送“.swift”类型的文件。有人知道它是如何工作的吗?
这是我的代码:
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
var EmailTxt = ""
override func viewDidLoad() {
super.viewDidLoad()
setEmailTxt()
sendEmail()
view.backgroundColor = UIColor.lightGray
}
func sendEmail() {
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["sgamesro@gmail.com"])
mail.setMessageBody(EmailTxt, isHTML: true)
mail.setSubject("test email")
if let filePath = Bundle.main.path(forResource: "test", ofType: "swift") {
print("# File path loaded.")
if let fileData = NSData(contentsOfFile: filePath) {
print("File data loaded.")
mail.addAttachmentData(fileData as Data, mimeType: "swift", fileName: "test.swift")
}
}
present(mail, animated: true)
} else {
// show failure alert
print("# func sendEmail() Mistake")
}
}
func setEmailTxt() {
EmailTxt = "<p>test line 01</p> <p>test line 02</p>" //<p>This is some text in a paragraph.</p>
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true)
}
}
这里有一些问题。 Xcode 不喜欢将 .swift 文件放入资源包中。
第一个明显的修复是转到 "Build Phases" 下的 "Copy Bundle Resources" 部分为您的目标添加 .swift 文件。
这种作品。但它不会复制原始 .swift 文件,它会复制两个与 .swift 文件的编译版本关联的相关文件。
并且似乎没有办法阻止 Xcode 编译 Swift 文件,即使它没有在 "Build Phases" 的 "Compile Sources" 部分下列出=].
我会这样做:
将应用程序包中所需的 .swift 文件重命名为 .swiftx 以获取其他类似的字段扩展名。确保文件在 "Copy Bundle Resources".
下的列表中然后将您的代码更新为:
if let fileURL = Bundle.main.url(forResource: "test", withExtension: "swiftx") {
print("# File path loaded.")
if let fileData = Data(contentsOf: fileURL) {
print("File data loaded.")
mail.addAttachmentData(fileData, mimeType: "text/plain", fileName: "test.swift")
}
}