生产模式下的文件路径

时间:2019-03-17 09:22:46

标签: electron electron-builder electron-packager

以电子方式开发应用程序,在开发模式下,文件路径一切正常。我创建了“文档”文件夹,用于存储文档。

import Cocoa
import MetalKit

let device = MTLCreateSystemDefaultDevice()!
// Our clear color, can be set to any color
let clearColor = MTLClearColor(red: 0.1, green: 0.57, blue: 0.25, alpha: 1)

let shaders = """
#include <metal_stdlib>
using namespace metal;

// Basic Struct to match our Swift type
// This is what is passed into the Vertex Shader
struct VertexIn {
float3 position;
float4 color;
};
// What is returned by the Vertex Shader
// This is what is passed into the Fragment Shader
struct VertexOut {
float4 position [[ position ]];
float4 color;
};
vertex VertexOut basic_vertex_function(const device VertexIn *vertices [[ buffer(0) ]],
uint vertexID [[ vertex_id ]]) {
VertexOut vOut;
vOut.position = float4(vertices[vertexID].position,1);
vOut.color = vertices[vertexID].color;
return vOut;
}
fragment float4 basic_fragment_function(VertexOut vIn [[ stage_in ]]) {
return vIn.color;
}
"""
let library = try device.makeLibrary(source: shaders, options: nil)
let pipelineDescriptor = MTLRenderPipelineDescriptor()
pipelineDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm
pipelineDescriptor.vertexFunction = library.makeFunction(name: "basic_vertex_function")
pipelineDescriptor.fragmentFunction = library.makeFunction(name: "basic_fragment_function")
let pipelineState = try device.makeRenderPipelineState(descriptor: pipelineDescriptor)

struct Vertex {
    var position: float3
    var color: float4
}

let queue = device.makeCommandQueue()!
var vertexBuffer: MTLBuffer!
var vertices: [Vertex] = [
    Vertex(position: float3(0,1,0), color: float4(1,0,0,1)),
    Vertex(position: float3(-1,-1,0), color: float4(0,1,0,1)),
    Vertex(position: float3(1,-1,0), color: float4(0,0,1,1))
]

vertexBuffer = device.makeBuffer(
    bytes: vertices,
    length: MemoryLayout<Vertex>.stride * vertices.count,
    options: []
)

enum MetalErrors: Error {
    case commandBuffer
    case passDescriptor
    case encoder
}

class MyMTKView : MTKView {
    override func draw() {
        guard let drawable = currentDrawable else { return }
        guard let passDescriptor = currentRenderPassDescriptor else { return }
        guard let commandBuffer = queue.makeCommandBuffer() else { return }
        guard let encoder = commandBuffer.makeRenderCommandEncoder(descriptor: passDescriptor) else { return }
        encoder.setRenderPipelineState(pipelineState)
         encoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0 )
        encoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: vertices.count)
        encoder.endEncoding()
        commandBuffer.present(drawable)
        commandBuffer.commit()
    }
}

let nsapp = NSApplication.shared
let appName = ProcessInfo.processInfo.processName
let window = NSWindow(
    contentRect: NSMakeRect(0, 0, 1000, 1000),
    styleMask: [.titled, .closable, .resizable],
    backing: NSWindow.BackingStoreType.buffered,
    defer: false
)
window.cascadeTopLeft(from:NSMakePoint(20,20))
window.title = appName;

let view = MyMTKView(frame: NSRect(origin: CGPoint.zero, size: window.frame.size), device: device)
window.contentView = view
view.device = device
view.colorPixelFormat = .bgra8Unorm
view.clearColor = clearColor

window.makeKeyAndOrderFront(nil)

nsapp.run()

此代码返回“文档”文件夹中的所有文件。

enter image description here

但是在生产模式下,当我打包我的应用程序时,会创建一个包含许多文件的文件夹,路径变为这样。

enter image description here

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对于指向内部资源的路径,我建议使用相对路径并动态构建它

var p = upath.toUnix(upath.join(__dirname, "documents", "this-image.jpg));

__dirname是当前执行文件的路径。

我使用upath toUnix函数是因为它规范了使用正斜杠的路径-对于跨平台应用程序,它对我来说效果更好。

相关问题